Perl:从文件中读取并保存到数组中

时间:2015-10-12 08:53:02

标签: arrays perl

我在Perl中有一个脚本,我的任务是对其进行一些更改。这当然意味着要了解哪一部分究竟做了什么。我不熟悉Perl语言,但我试着阅读一些教程,但仍然有些事让我感到困惑。我被困在以下部分:

while (<KOEFICIENTYfile>) {
    @_=(split(/\s+/, $_));
    push(@ZAID,shift(@_));
    $KOEFICIENTY{$ZAID[-1]}=[@_];
}

正如我理解这一部分那样:

  1. 从文件句柄KOEFICIENTYfile
  2. 读取行
  3. 用空格(一个或多个)
  4. 分隔
  5. 将此分隔数组中的第一项加载到数组ZAID中(并在此过程中将其从@_中删除)
  6. ???将一个单独的数组的其余部分添加到数组KOEFICIENTY中?我被大括号部分和等号后的方括号混淆。
  7. 我认为我理解@$@_或负索引的含义,但这超出了我的意思。能告诉我这个意思吗?

3 个答案:

答案 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}的列表的引用}。