1

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

我还有一个计数器,它每四行递增一次,称为 $lineno。

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

但与其直接设置它们四次,我想在一行中完成,然后在 5 处检查 $lineno 来完成其余的工作。

所以不要写出来:@linearray1=split(",",$_)

我想做类似的事情:@linearray.$lineno=split(",",$_);

4

2 回答 2

4

不要生成变量名。

相反,使用

@{ $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;

于 2013-07-31T16:26:48.150 回答
-1

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

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

由于split将默认为$_没有第二个参数,并且为了完整的答案,您可以执行以下操作:

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

不要被{}那个语法弄糊涂了,没有散列取消引用,但是当你有一个印记紧跟一个大括号时,大括号中的表达式的结果被用作变量的名称。

您是否有理由不能使用二维数组,例如@{$linearray[$lineno]}?这被认为更干净,而且几乎可以肯定会快一点。

于 2013-07-31T15:57:38.533 回答