正規表現とか(1)

さっそく、Hokkaido.pm#3で学んだお話だよ!

やってることは、a,b,c…x,y,zまでのいずれかの文字が連続したところを探して、
該当箇所を取得しちゃうっていうスクリプト。

use strict;
use warnings;

my $str = "abc,def,ghi";

#my ($foo) = $str =~ m/([a-z]+)/; # こういう書き方もあるよ!
my ($foo) = $str =~ m/(\w+)/;
print $foo . "\n"; # => abc
print "\n";

my $bar = $str =~ m/(\w+)/;
print $bar . "\n"; # => 1
print "\n";

これの重要なところは、
後者は該当箇所は存在するか否かが返ってくるってこと。
パースしたいのか、有無を知りたいのかで、
書き方が違うよってお話。

私は後者しか知らなかったので、
$1, $2,…とか使ってました。

ちなみに、こう書くとすべて取得できるよ!

my @tmp = $str =~ m/(\w+)/g;
print scalar(@tmp) . "\n"; # => 3
print $tmp[0] . "\n"; # => abc
print $tmp[1] . "\n"; # => def
print $tmp[2] . "\n"; # => ghi
print "\n";

でも、この辺の話って、
「配列」「リスト」「評価」「コンテキスト」とか、
この手のキーワードをもっさり出てきてうれしくないので、
懇親会でさりげなくリクエスト出しておきました。

こういった、今更聞けないperlのお話も、
Hokkaido.pmなら聞けるよ!
では、おやすみなさい!!

Leave a Comment