gpt4 book ai didi

perl - 为什么在比较应该不同的数组切片时 smartmatch 返回 true?

转载 作者:行者123 更新时间:2023-12-04 07:42:29 27 4
gpt4 key购买 nike

以下脚本智能匹配两个数组的切片。一开始,两个数组是相同的,我得到了合理的结果。然后我更改其中一个数组并智能匹配两个新切片,但它仍然说这些切片是相同的。但是,当我将切片复制到数组中时,对数组进行智能匹配表明它们确实不同。

剧本:

#!/usr/bin/perl
use warnings;
use strict;
use diagnostics;

my @x = qw (one two);
my @y = qw (one two);
my @x_s;
my @y_s;

print "Before change: values are the same:\n";
@x_s = @x[0,1];
@y_s = @y[0,1];
print "\@x_s: @x_s\n";
print +(@x[0,1] ~~ @y[0,1]) ? "equal\n" : "not equal\n";
print +(@x_s ~~ @y_s) ? "equal\n" : "not equal\n";

$x[0]='three';

print "After change: values should be different:\n";
@x_s = @x[0,1];
@y_s = @y[0,1];
print "\@x_s: @x_s\n";
print +(@x[0,1] ~~ @y[0,1]) ? "equal\n" : "not equal\n";
print +(@x_s ~~ @y_s) ? "equal\n" : "not equal\n";

输出:
Before change: values are the same:
@x_s: one two
equal
equal
After change: values should be different:
@x_s: three two
equal
not equal

我使用的是 Perl 5.10.1,这对数组切片和散列切片都会发生。为什么会发生这种情况?

最佳答案

看起来智能匹配适用于切片的标量上下文。

考虑以下代码片段:

你的情况:

#!/usr/bin/perl

my @foo = (1,2);
my @bar = (3,4);
print @foo[1,2] ~~ @bar[1,2] ? "Equal\n" : "Not equal\n";

这可能是你需要的:
#!/usr/bin/perl

my @foo = (1,2);
my @bar = (3,4);
print [ @foo[1,2] ] ~~ [ @bar[1,2] ] ? "Equal\n" : "Not equal\n";

关于perl - 为什么在比较应该不同的数组切片时 smartmatch 返回 true?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9176179/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com