我有一个文件,其中每4行有一个信息块。我已经设置了4个名为@ linearray1,@ linearray2,@ linearray3,@ linearray4的数组。
我还有一个计数器而不是每四行称为$ lineno的增量。
我想设置四个数组,然后适当地解析它们。
但是不是直接设置它们四次我想在一行中完成它然后只需检查$ lineno为5来完成剩下的工作。
所以不要写出来: @ linearray1 =分裂( “”,$ _)
我想做的事情如下: 。@ linearray $ LINENO =分裂( “”,$ _);
答案 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]}
?这被认为是更清洁,几乎肯定会更快。