为什么perl不能使用下一个代码?
use Data::Dumper;
my $list=[{"name"=>1},{"name"=>1},{"name"=>2}];
foreach my $cat(@{$list}) {
unless(grep { $_->{name} eq 3 } @{$list}+0) {
print $count;
}
}
打印不返回任何结果,但如果我声明变量计数,则条件除非魔术方式开始工作
use Data::Dumper;
my $list=[{"name"=>1},{"name"=>1},{"name"=>2}];
foreach my $cat(@{$list}) {
my $count=grep { $_->{name} eq 3 } @{$list};
unless($count) {
print $count;
}
}
以上代码打印111 请告诉我,为什么不使用条件除非没有声明变量my $ count?
答案 0 :(得分:1)
为什么它不起作用?好吧,因为@{$list}+0
。您正在向列表添加标量 - 您将得到一个标量作为结果(数组的大小,在此示例中为3
)。然后,您正在使用标量而不是列表。
此外,您的第一个示例中的$count
根本没有定义。
使用@{$list}
代替@{$list}+0
可以按预期工作,即:
use Data::Dumper;
my $list=[{"name"=>1},{"name"=>1},{"name"=>2}];
foreach my $cat(@{$list}) {
unless(grep { $_->{name} eq 3 } @$list) {
print "Hello there.\n";
}
}