我在Perl中有一个脚本,我的任务是对其进行一些更改。这当然意味着要了解哪一部分究竟做了什么。我不熟悉Perl语言,但我试着阅读一些教程,但仍然有些事让我感到困惑。我被困在以下部分:
while (<KOEFICIENTYfile>) {
@_=(split(/\s+/, $_));
push(@ZAID,shift(@_));
$KOEFICIENTY{$ZAID[-1]}=[@_];
}
正如我理解这一部分那样:
KOEFICIENTYfile
ZAID
中(并在此过程中将其从@_
中删除)KOEFICIENTY
中?我被大括号部分和等号后的方括号混淆。 我认为我理解@
,$
,@_
或负索引的含义,但这超出了我的意思。能告诉我这个意思吗?
答案 0 :(得分:1)
[-1]
索引只是说&#34;数组的最后一个元素&#34;的快捷方式。
KOEFICIENTY实际上是一个哈希(你可以告诉它,因为它在索引周围使用花括号而不是方括号),所以你要将数组的其余部分@_放入一个名为KOEFICIENTY的哈希中。数组最后一个元素的一个键。
如果你包括:
use Data::Dumper
位于脚本顶部并执行
print Dumper(%KOEFICIENTY)
它会很好地为您输出格式,这可能会有所帮助
答案 1 :(得分:1)
原始编码员试图使用负偏移量过于聪明。如果代码用一个简单的临时变量编写,那就更明显了:
while (<KOEFICIENTYfile>) {
@_ = (split(/\s+/, $_));
my $key = shift(@_);
push(@ZAID, $key);
$KOEFICIENTY{$key} = [@_];
}
$KOEFICIENTY
上的大括号表明这是一个&#34;哈希&#34;名为%KOEFICIENTY
的键/值对,而不是正常数组。
如果您实际上不需要保留按键的排序顺序,则只需使用keys %KOEFICIENTY
检索它们,而不是将其存储在@ZAID
中。
答案 2 :(得分:0)
@zaid
是一个列表,其中添加了拆分的第一部分。
%KOEFICIENTY
是一个哈希值,其中对分割其余部分的引用存储为第一部分键下的列表引用。
因此,如果该行为a b c
,则@zaid
将获得a
,%KOEFICIENTY{'a'}
将包含对包含b
和{{1}的列表的引用}。