導入
マッチした部分を取り出したいことはよくあります。パターンの一部を ( ) で囲むと、その部分が変数 $1, $2, … に入ります。
説明
マッチが成功すると、( ) で囲んだ部分が左から順に $1・$2……で参照できます。
use strict;
use warnings;
my $date = "2024-08-15";
if ($date =~ /(\d+)-(\d+)-(\d+)/) {
print "年: $1\n"; # 2024
print "月: $2\n"; # 08
print "日: $3\n"; # 15
}
/g フラグ(グローバル)を付けてリストで受けると、すべてのマッチ(やキャプチャ)を一度に配列へ集められます。
use strict;
use warnings;
my $text = "cat=3, dog=5, bird=2";
my @nums = ($text =~ /(\d+)/g); # すべての数字
print "@nums\n"; # 3 5 2
my $sum = 0;
$sum += $_ for @nums;
print "合計 $sum\n"; # 10
やってみよう
$date の形式やパターンの ( ) の位置を変えて、$1〜$3 に何が入るか確かめましょう。
演習
my $s = "name: Taro"; から、(\w+) を使って : のうしろの名前を取り出し、$1 を表示してください(結果は Taro)。
ヒント1を見る
if ($s =~ /:\s*(\w+)/) { print "$1\n"; }。