最短一致
HTMLファイルからタグ( < と > で囲まれた部分)を削除するために s/<.*>//g; と書くと、タグが複数あった場合にその間の文字がすべて消えてしまいます。
これはPerlの数量子( * や + など)が通常では最長一致とするためです。最長一致なので .* の部分が最初の < と最後の > の間の文字にマッチしてしまいます。
そこで、最長一致ではなく最短一致を使うようにします。最短一致にする場合には数量子の後ろに ? を付けます。すると .* の部分が最初の < と最初の > にマッチすることになるので、間の文字は消えずに残ります。
# 最短一致の例 my $str = 'aaabbb'; my $str2 = $str; $str =~ s/a+/1/; $str2 =~ s/a+?/1/; print "[$str]\n"; # 1bbb print "[$str2]\n"; # 1aabbb # タグ削除の例 my $title = '<title>ホームページ</title>'; my $title2 = $title; $title =~ s/<.*>//g; $title2 =~ s/<.*?>//g; print "[$title]\n"; # 何も出ない print "[$title2]\n"; # ホームページ と出る