Regex 在Perl中解析文件并在数组中存储分隔的部分

Regex 在Perl中解析文件并在数组中存储分隔的部分,regex,arrays,perl,parsing,Regex,Arrays,Perl,Parsing,我需要处理外部数据,一个纯文本文件,其中包含要用Perl处理的数据(我正在学习这种语言) 如何读取此文件并将每个节存储在数组中(节是已知的,并在{xxxx}和{xxxx END}之间进行分隔)。节中的每个数据都转换为列表并存储在数组中。 我希望有这样的东西,例如: @name = ( ("orga","21","12348","organisation"), ("serv","22","12348","service") ) 像这样的怎么样: my %list; while(<DATA&

我需要处理外部数据,一个纯文本文件,其中包含要用Perl处理的数据(我正在学习这种语言)

如何读取此文件并将每个节存储在数组中(节是已知的,并在
{xxxx}
{xxxx END}
之间进行分隔)。节中的每个数据都转换为列表并存储在数组中。 我希望有这样的东西,例如:

@name = ( ("orga","21","12348","organisation"), ("serv","22","12348","service") )

像这样的怎么样:

my %list;
while(<DATA>) {
    chomp;
    if (/^\{(.*?)\}/ .. /^\{${1}-END\}/) {
        push @{$list{$1}}, $_ unless /^\{/;
    }
}
say Dumper\%list;

像这样的怎么样:

my %list;
while(<DATA>) {
    chomp;
    if (/^\{(.*?)\}/ .. /^\{${1}-END\}/) {
        push @{$list{$1}}, $_ unless /^\{/;
    }
}
say Dumper\%list;

尝试创建根据其他变量的值命名的变量是一个坏主意。最好的方法是构建数组散列,而不是像
@name
那样分离命名数组

类似于这个程序的东西可以满足您的需要。我曾经显示过程序构建的数据结构

use strict;
use warnings;

use Data::Dump;

open my $fh, '<', 'data.txt' or die $!;

my %data;
my $sect;
while (<$fh>) {
  chomp;
  if (/^\{(\w+)\}$/) {
    $sect = $1;
  }
  elsif (/^\{($sect-END)\}$/) {
    undef $sect
  }
  elsif (defined $sect) {
    push @{ $data{$sect} }, [split /:/];
  }
}

dd \%data;

尝试创建根据其他变量的值命名的变量是一个坏主意。最好的方法是构建数组散列,而不是像
@name
那样分离命名数组

类似于这个程序的东西可以满足您的需要。我曾经显示过程序构建的数据结构

use strict;
use warnings;

use Data::Dump;

open my $fh, '<', 'data.txt' or die $!;

my %data;
my $sect;
while (<$fh>) {
  chomp;
  if (/^\{(\w+)\}$/) {
    $sect = $1;
  }
  elsif (/^\{($sect-END)\}$/) {
    undef $sect
  }
  elsif (defined $sect) {
    push @{ $data{$sect} }, [split /:/];
  }
}

dd \%data;

我认为你应该展示一个完整的工作程序,尤其是对于学习该语言的人。我认为遗漏
use
语句没有任何好处。我认为你应该展示一个完整的工作程序,尤其是对于学习该语言的人。我认为遗漏
use
语句没有任何好处。谢谢你非常感谢你,这正是我所需要的!
{
  DATA  => [
             ["palm", "data", "fluid", 147],
             ["rose", "data", "fluid", 149],
           ],
  NAME  => [
             ["orga", 21, 12348, "oragnisation"],
             ["serv", 22, 12348, "service"],
           ],
  OTHER => [
             ["palm", "data", "fluid", 147],
             ["rose", "data", "fluid", 149],
             ["germ", "data", "fluid", 189],
           ],
}