正如标题所说,我有一个简单的文本文件,我试图将其分解为几个不同的数组。这是简单文本文件的样子
--ARRAY1--
eenie
--ARRAY2--
meenie
minie
--ARRAY3--
moe
我在代码中的主要思想是循环遍历此文件,并将“--Arrays--”之间的所有内容放入与文本文件中的数组相对应的数组中。
##logic that loops through above text file{
$line =~ s/[\ ]//g; #chops off spaces
if($line =~/(\-\-)/){
if($line =~/[ARRAY1]/){$arrayholder='array1';}
if($line =~/[ARRAY2]/){$arrayholder='array2';}
if($line =~/[ARRAY3]/){$arrayholder='array3';}
}
push @"$arrayholder", "$line";
}
## END LOOP LOGIC}
我遇到的问题是
push @"$arrayholder", "$line";
似乎我无法使用变量来调用数组。我甚至尝试过做
if($line =~/[ARRAY2]/){$arrayholder='@array2';}
无济于事
感谢任何帮助。我愿意修复我的整个逻辑。感谢
答案 0 :(得分:2)
如果我理解正确,那么我建议您使用数组引用的哈希。喜欢这个
use strict;
use warnings;
my %data;
my $array;
while (<DATA>) {
chomp;
if (/^--(\w+)--/) {
$array = $1;
}
elsif ($array) {
push @{ $data{$array} }, $_;
}
}
use Data::Dump;
dd \%data;
__DATA__
--ARRAY1--
eenie
--ARRAY2--
meenie
minie
--ARRAY3--
moe
<强>输出强>
{ ARRAY1 => ["eenie"], ARRAY2 => ["meenie", "minie"], ARRAY3 => ["moe"] }
答案 1 :(得分:1)
考虑hash-of-arrays data structure:
use warnings;
use strict;
my %hoa;
my $arr;
while (<DATA>) {
chomp;
if (/^--(\w+)/) {
$arr = $1;
next;
}
else {
push @{ $hoa{$arr} }, $_;
}
}
use Data::Dumper;
$Data::Dumper::Sortkeys=1;
print Dumper(\%hoa);
__DATA__
--ARRAY1--
eenie
--ARRAY2--
meenie
minie
--ARRAY3--
moe
打印出来:
$VAR1 = {
'ARRAY1' => [
'eenie'
],
'ARRAY2' => [
'meenie',
'minie'
],
'ARRAY3' => [
'moe'
]
};