5.10을 시작으로, 당신은뿐만 아니라 named capture buffers를 사용할 수 있습니다
이
#!/usr/bin/perl
use strict; use warnings;
my %data;
my $s = 'abcdefghijklmnopqr';
if ($s =~ /abc (?<first>def) ghi (?<second>jkl) mno (?<third>pqr)/x) {
push @{ $data{$_} }, $+{$_} for keys %+;
}
use Data::Dumper;
print Dumper \%data;
출력 :
$VAR1 = {
'first' => [
'def'
],
'second' => [
'jkl'
],
'third' => [
'pqr'
]
};
이전 버전의 경우, 각 촬영을 위해 줄을 추가하는 것을 피한다 다음을 사용할 수 있습니다 버퍼 :
#!/usr/bin/perl
use strict; use warnings;
my $s = 'abcdefghijklmnopqr';
my @arrays = \ my(@first, @second, @third);
if (my @captured = $s =~ /abc (def) ghi (jkl) mno (pqr) /x) {
push @{ $arrays[$_] }, $captured[$_] for 0 .. $#arrays;
}
use Data::Dumper;
print Dumper @arrays;
출력 :
$VAR1 = [
'def'
];
$VAR2 = [
'jkl'
];
$VAR3 = [
'pqr'
];
하지만 관련 데이터를 단일 데이터 구조로 유지하는 것이 좋으므로 해시를 사용하는 것이 가장 좋습니다. 변수의 이름이 정말 버퍼의 이름은 중요하지 않을 경우 first
이 second
는 등, 또는 만 위해, 당신은 사용할 수 않는 경우,
my %data;
my @keys = qw(first second third);
if (my @captured = $s =~ /abc (def) ghi (jkl) mno (pqr) /x) {
push @{ $data{$keys[$_]} }, $captured[$_] for 0 .. $#keys;
}
을 또는이 그러나, 보조 배열을 필요로하지 않습니다 :
my @data;
if (my @captured = $s =~ /abc (def) ghi (jkl) mno (pqr) /x) {
push @{ $data[$_] }, $captured[$_] for 0 .. $#captured;
}
패턴 일치 횟수를 계산 하시겠습니까? 그게 나에게 맞는 것 같아 ... – Zaid
나는 성냥을 처리해야한다. – Incognito