perl – 了解推送到哈希和|| = []构造. (在样板中生成.t)
我正在重新熟悉Perl,并且刚刚使用模块启动程序来初始化一个新项目.我现在正试图理解生成的代码.一切都很好,除了以下指示:
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) { ##I'm having problems here push @{$violated{$desc}||=[]},$.; } } } ... } 我有两个问题: > || = [].这是|后跟| =,或者这是一个还是||然后是a = [].有人能跟我说说这里发生的事吗? (我猜测“如果散列是空的,则创建一个空的匿名数组来初始化散列”,但我很难看到它是如何从代码中形成的.) 我认为在这行代码中我有很多东西需要学习 – 有人可以通过它来帮助我吗? 解决方法
> || =:这是一个赋值运算符.例
$a ||= $b; # corresponds to $a = $a || $b; 见男人perlop.在你的例子中 $a ||= []; # corresponds to $a = $a || []; 即:如果左操作数被定义为空,否则分配一个空数组引用 my $array_ref = $violated{$desc}; push @{array_ref},$.; 写得更详细: if (! $violated{$desc} ) { $violated{$desc} = []; } my $array_ref = $violated{$desc}; push @{ $array_ref },$.; 编辑 数组和数组引用 >一个用()构造的数组,包含一个动态有序的元素列表(在Perl数组中可以动态增长) 例 my @a = ( 1,2,3); # $a[0] will contain 1 my $array_ref = [ 10,11,12 ]; # array_ref is a _pointer_ to an array containing 10,11 and 12 要访问数组引用,您需要取消引用它: @{ $array_ref }; my @array = @{ $array_ref }; # is valid 您可以将{$array_ref}作为数组访问 ${ $array_ref }[0] 现在回到你在评论中的问题:%violated是一个带有以下键值对的哈希:一个字符串($desc)和一个数组引用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |