我是Perl的新手,如果有人可以帮助我,我会很感激。
foreach $line(@resultans){
my @newresultans = split "_",$line;
## i will have lots more of $newresultans and @ans
push(@ans1, $newresultans[2]);
push(@ans2, $newresultans[3]);
......
......
}
我的目的是拆分这样的东西,并将它们分成许多数组。
12,2,依此类推,将以下行推入数组(@ans1
)。同样是6,7(@ans2
),之后有更多数字,由_
分隔。形成@ans3
,@ans4
2_abc_12_6_.......
2_def_2_7_......
.................
我可以尝试这样的事吗?但它似乎没有用。如果有人可以帮助我,我真的很感激。谢谢!
$ANS_name ="ANS_$colnm";
foreach $line(@resultans){
my @newresultans = split "_",$line;
for($colnm=0;$colnm <=$column[0] ; $colnm++){
push(@$ANS_name, $newresultans[2]);
}
}
答案 0 :(得分:3)
在我看来,你所说的是你在每个分割中都有不同数量的列,并且你想要一种动态而不是硬编码的方式来存储它们。我认为你要找的是数组或数组:
my @all;
for my $line (@res) {
my @new = split /_/, $line; # split takes a regex, not a string (normally)
for my $index (0 .. $#new) {
push @{ $all[$index] }, $new[$index];
}
}
关于修改变量名称的想法非常糟糕,你应该避免这种情况。如果没有其他任何东西,它正是哈希所做的,但你不必破坏任何规则来使用哈希。我们可以在这里使用哈希,但由于你的数据是连续的,并且你没有固定的名字,所以没有意义。例如:
my %hash;
...
for my $index( 0 .. $#res ) {
$ANS_name ="ANS_$index";
push @{ $hash{$ANS_name} }, $new[$index];
}
答案 1 :(得分:1)
你问的是可能的,但不满意。使用数组数组要好得多:
my @column;
for my $line (@resultans) {
my (undef, undef, @parts) = split /_/, $line; # discard first 2 elements
push @{ $column[$_] }, $parts[$_] for 0 .. $#parts;
}
然后@column
将是:
(
[12, 2],
[6, 7],
)
我们可以访问第一列的条目,例如@{ $column[0] }
。