パターンマッチ(1)

本日からパターンマッチに突入。

まずはシンプルなマッチ演算子から。

# マッチ演算子
while (<>)
{
	if (/9/)
	{
		print "正解: $_"
	}
	else
	{
		print "不正解: $_";
	}
}

これをオプションをつけて実行すると以下のようなかんじ。

E:?Perl>perl match1.pl Windows.dat
不正解: Windows 3.1
不正解: Windows NT3.5
正解: Windows 95
不正解: Windows NT4
正解: Windows 98
不正解: Windows 2000
不正解: Windows Me
不正解: Windows XP
不正解: Windows Vista

    • while (<>)で無名ファイルハンドルを使用してdatファイルの1行目からデータを読み込む
    • if (/9/)で、行の中に9を含むものを選択する//がマッチ演算子
    • elseで、行の中に9を含まないものが選択される

※複数のブロックがあるので分かりやすいようタブで識別する

つづいてパターン結合演算子

# パターン結合演算子
@data = ('Perl', 'PERL', 'perl', 'PHP', 'Java', 'Ruby');

foreach $name (@data)
{
	if ($name =~ /Perl/)
	{
		print "正解: $name?n";
	}
	elsif ($name =~ /Perl/i)
	{
		print "正解だけど大文字小文字を確認: $name?n";
	}
	else
	{
		print "不正解: $name?n";
	}
}
    • if ($name =~ /Perl/)で、"Perl"という文字に完全にマッチするものを選別する=~がパターン結合演算子
    • elsif ($name =~ /Perl/i)で、"Perl"という文字列だが大文字・小文字については区別しないものを選別する

これを実行するとこんなかんじ。

E:?Perl>perl match3.pl
正解: Perl
正解だけど大文字小文字を確認: PERL
正解だけど大文字小文字を確認: perl
不正解: PHP
不正解: Java
不正解: Ruby

なるほど。簡単だな。
ちょっと短いけど今日はここまでー。