用@和%理解Perl片段

时间:2018-08-20 06:41:43

标签: perl

我有以下Perl代码。我读@表示数组和%哈希,因此我对代码的功能感到困惑,尤其是foreach $pron (keys %LEX)语句。此行中每个元素的目的是什么?LEX是数组还是哈希?

while ( $line = <STDIN> ) {
     chomp $line;
     ($key, $val) = split " ", $line, 2;
     $val = join(" ", split(" ", $val));
     push @{$LEX{$val}}, $key;
   }

   open(MAP, "| sort -u > $ARGV[1]") or die "Cannot open $ARGV[1]\n";
   foreach $val (keys %LEX) {
     $head = $LEX{$val}->[0];
     foreach $alt (@{$LEX{$val}}) {
       print MAP "$alt,$head\n";
     }
   }

1 个答案:

答案 0 :(得分:2)

foreach循环中,一个局部标量变量被依次分配在圆括号中的值列表中的每个值:

for my $foo (1 .. 3) {
    say "-> $foo";
}

输出:

-> 1
-> 2
-> 3

此处keys %LEX返回哈希值%LEX的键的 list ,因此这里$val每次循环时都包含%LEX的键被执行。在这种情况下,变量的命名不正确,我会考虑使用$key

下一行$head = $LEX{$val}->[0];表示散列%LEX数组引用$LEX{$val}是单个标量值,并且箭头运算符取消引用该数组。然后使用它的第一个元素。

有关使用引用和嵌套数据结构的详细信息,请参见perlrefperldata