解决方法
如果字符串已知,则可以在标量上下文中使用
grep
:
if (@test == grep { $_ eq $string } @test) { # all equal }
否则,使用哈希:
my %string = map { $_,1 } @test; if (keys %string == 1) { # all equal }
或更短的版本:
if (keys %{{ map {$_,1} @test }} == 1) { # all equal }
注意:当用作Perl中的字符串时,未定义的值的行为类似于空字符串(“”).因此,如果数组只包含空字符串和undefs,则检查将返回true.
这里有一个解决方案:
my $is_equal = 0; my $string = $test[0]; # the first element for my $i (0..$#test) { last unless defined $string == defined $test[$i]; last if defined $test[$i] && $test[$i] ne $string; $is_equal = 1 if $i == $#test; }