我正在编写一个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 ..)。
我看到的解决方案是将其保存在数组中,但我不知道如何将这些值保存在数组中。请告诉我是否能做到。告诉我是否有其他方法可以获得结果。
答案 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)