我想在Perl中间接设置数组

时间:2013-07-31 15:51:30

标签: perl

我有一个文件,其中每4行有一个信息块。我已经设置了4个名为@ linearray1,@ linearray2,@ linearray3,@ linearray4的数组。

我还有一个计数器而不是每四行称为$ lineno的增量。

我想设置四个数组,然后适当地解析它们。

但是不是直接设置它们四次我想在一行中完成它然后只需检查$ lineno为5来完成剩下的工作。

所以不要写出来:    @ linearray1 =分裂( “”,$ _)

我想做的事情如下:    。@ linearray $ LINENO =分裂( “”,$ _);

2 个答案:

答案 0 :(得分:4)

Don't generate variable names.

相反,请使用

@{ $lines[$lineno] } = split /,/;

或更直接:

$lines[$lineno] = [ split /,/ ];

甚至

push @lines, [ split /,/ ];

您可以使用

访问元素
for my $lineno (0..$#lines) {
   say join ', ', @{ $lines[$lineno] };
}

for my $line (@lines) {
   say join ', ', @$line;
}

请记住始终使用use strict; use warnings;

答案 1 :(得分:-1)

您可以在Perl中使用变量作为变量的名称(或该名称的一部分)。您要查找的语法是:

@{'linearray'.$lineno} = split(',', $_);

由于split默认为$_,因为没有第二个arg,为了得到完整答案,你可以这样做:

foreach $lineno (1..4) @{'linearray'.$lineno} = split ',';

不要对该语法中的{}感到困惑,没有哈希解除引用,但是当你有一个sigil后面紧跟一个开括号时,括号中表达式的结果被用作变量的名称。

是否有理由不能使用二维数组,例如@{$linearray[$lineno]}?这被认为是更清洁,几乎肯定会更快。