名前付きキャプチャ


 通常はキャプチャした文字列は$1や$2と言うように番号で参照しますが、バージョン5.10からは名前で指定できるようになりました。
 ?<名前>で名前をつけて、$+{key}で参照します。
use strict;
use warnings;
use v5.10;

while (my $line = <DATA>) {
    chomp $line;
    if ($line =~ /^(?<key>.*?)\s*=\s*(?<val>.*)$/) {
        printf "%s: %s\n", $+{key}, $+{val};
    }
}

__DATA__
foo = hoge
bar = fuga
baz = piyo
# 名前付きキャプチャを使わない場合の書き方
use strict;
use warnings;

while (my $line = <DATA>) {
    chomp $line;
    if ($line =~ /^(.*?)\s*=\s*(.*)$/) {
        printf "%s: %s\n", $1, $2;
    }
}

__DATA__
foo = hoge
bar = fuga
baz = piyo

関連項目

なし