Regex I';我试图把一个文件分成不同的数组

Regex I';我试图把一个文件分成不同的数组,regex,arrays,perl,Regex,Arrays,Perl,正如标题所说,我有一个简单的文本文件,我正试图将它分解成几个不同的数组。下面是简单文本文件的外观 --ARRAY1-- eenie --ARRAY2-- meenie minie --ARRAY3-- moe 我在代码中的主要思想是循环遍历这个文件,并将“-array--”之间的所有内容放入与文本文件中的数组相对应的数组中 ##logic that loops through above text file{ $line =~ s/[\ ]//g; #chops off spaces

正如标题所说,我有一个简单的文本文件,我正试图将它分解成几个不同的数组。下面是简单文本文件的外观

--ARRAY1--
eenie
--ARRAY2--
meenie
minie
--ARRAY3--
moe
我在代码中的主要思想是循环遍历这个文件,并将“-array--”之间的所有内容放入与文本文件中的数组相对应的数组中

##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';}
无济于事

感谢您的帮助。我愿意修正我的全部逻辑。谢谢

考虑一下:

考虑一个:

考虑一个:

考虑一个:


如果我理解正确,那么我建议您使用数组引用的散列。像这样

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

如果我理解正确,那么我建议您使用数组引用的散列。像这样

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

如果我理解正确,那么我建议您使用数组引用的散列。像这样

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

如果我理解正确,那么我建议您使用数组引用的散列。像这样

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
解释为什么这两个答案使用HoA而不是变量名。解释为什么这两个答案使用HoA而不是变量名。解释为什么这两个答案使用HoA而不是变量名。解释为什么这两个答案使用HoA而不是变量名。