首页 > 解决方案 > 用 @ 和 % 理解 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";
     }
   }

标签: perl

解决方案


foreach循环内部,一个局部标量变量被一个接一个地分配给圆括号中的值列表中的每个值:

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

输出:

-> 1
-> 2
-> 3

这里keys %LEX返回Hash 的键列表%LEX,所以这里$val包含了%LEX每次循环执行时的键。在这种情况下,变量命名不当,我会考虑$key

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

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


推荐阅读