在perl中获取数组中的许多值

时间:2015-03-17 13:15:36

标签: perl

我正在编写一个prel程序,其中我有一个包含模式的输入文件:

FIELDS=(1,2,3,4)

OR

FIELDS=(1,10,3,A,11,10,7,D,9,10,11,A)

值的数量不是恒定的,而是在4的一堆中。可能有4,8,12或16或更多值。

我想将这些字段值保存在单独的变量中。 为此,我将值设置为

if($filed1=~m/^\"SORT FIELDS"\s*=\s*"("\s*(.*?)[,]+(.*?)[,]+(.*?)[,]+(.*?)[,]+[,]*")"/sgim)
.
.

$val1 = $1;
$val2 = $2;
$val3 = $3;
$val4 = $4;

但这不符合我的目的,因为每次会有不同数量的值(4或8或12 ..)。

我看到的解决方案是将其保存在数组中,但我不知道如何将这些值保存在数组中。请告诉我是否能做到。告诉我是否有其他方法可以获得结果。

3 个答案:

答案 0 :(得分:-1)

您可以使用split,就像这样

use strict;
use warnings;

my $str = 'FIELDS=(1,10,3,A,11,10,7,D,9,10,11,A)';

if ( $str =~ / FIELDS \s* = \s* \( ( [^)]* ) \) /x ) {
  my @fields = split /,/, $1;
  print "$_\n" for @fields;
}

<强>输出

1
10
3
A
11
10
7
D
9
10
11
A

答案 1 :(得分:-1)

您可以使用split将逗号分隔的匹配分成单个部分:

use strict; 
use warnings; 

my $line = 'FIELDS=(1,10,3,A,11,10,7,D,9,10,11,A)'

if ( my ($fields) = $line =~ /FIELDS=(\(.*\))/ ) {
   my @vars = split /,/, $fields; 
   # do whatever you want with @vars
}

答案 2 :(得分:-1)

TIMTOWTDI。其中一个是:

use strict;
use warnings;

while (<DATA>) {
    next unless /^FIELDS=\(([^)]*)\)/;
    my @fields = split ',', $1;
    while (@fields) {
        my @subfields = splice @fields, 0, 4;
        print "$. @subfields\n";
    }
}

__DATA__
FIELDS=(1,2,3,4)
FIELDS=(1,10,3,A,11,10,7,D,9,10,11,A)