以下数组@ {$violated {$desc} || = []}在下面的子程序中意味着什么?
据我所知,@ {$violated {$desc}}是$violated {$desc}引用的匿名数组.
据我所知,@ {$violated {$desc}}是$violated {$desc}引用的匿名数组.
sub not_in_file_ok { my ($filename,%regex) = @_; open( my $fh,'<',$filename ) or die "couldn't open $filename for reading: $!"; my %violated; while (my $line = <$fh>) { while (my ($desc,$regex) = each %regex) { if ($line =~ $regex) { push @{$violated{$desc}||=[]},$.; } } } if (%violated) { fail("$filename contains boilerplate text"); diag "$_ appears on lines @{$violated{$_}}" for keys %violated; } else { pass("$filename contains no boilerplate text"); } }
解决方法
这是一个
compound assignment operator;如果它包含一个假值(即它尚未初始化),它会将[](对新的空数组的引用)赋给$violated {$desc}.
这也是完全没必要的,因为无论如何Perl都是自动完成的.移除了|| = []的相同代码更清楚地做了同样的事情.
但是,有时候做这样的事情确实有意义,所以值得记住这个模式.