我正在尝试将文件分解为单独的数组perl

时间:2014-02-07 19:42:25

标签: regex arrays perl

正如标题所说,我有一个简单的文本文件,我试图将其分解为几个不同的数组。这是简单文本文件的样子

--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';}

无济于事

感谢任何帮助。我愿意修复我的整个逻辑。感谢

2 个答案:

答案 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'
                      ]
        };