我有以下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";
}
}
答案 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}
是单个标量值,并且箭头运算符取消引用该数组。然后使用它的第一个元素。