- ベストアンサー
perlでバックスラッシュのパターンマッチを使った場合の挙動
- perlのバックスラッシュのパターンマッチを使った場合、特定のパターンに一致する文字列を取得できます。
- パターンに/g修飾子を付けると、一致したすべての文字列を取得することができます。
- 複数のパターンにマッチする場合、()を使って複数の変数に結果を代入することができます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>$b=$a=~/パターン/; >の$bには何が得られるのでしょうか。 >どんなときに使うのでしょうか。 Pealで $a=~/パターン/ という式を書いた場合、得られるのは「真」か「偽」です。 パターンが含まれているか否かが「真」または「偽」の値になり、その結果を$bに代入する事になります。 if ($a=~/パターン/ ) { print "マッチした\n"; } else { print "マッチしなかった\n"; } と書く代わりに $b=$a=~/パターン/ if ($b) { print "マッチした\n"; } else { print "マッチしなかった\n"; } と書く事が出来ます。 >($b)=$a=~/パターン/; >に/g修飾子を付けると >何も得られなくなってしまいますが >なぜでしょうか。 「エラーだから」です。 文字列がパターンにマッチしたかどうかを真か偽で返す 文字列 = ~/パターン/ という演算子には「/g」修飾文字は付けられません。付けても「結果は未定義」であり、どういう結果になるかは「決まっていない」のです。 とは言え「偽」つまり「何も入ってない状態」になる事が多いようですが。 >$a=~/(\d)\d(\d)/g;からは、 >(1,3,4,6)のリストが返されて、 そうとは限りません。 「メンドクサイからそういう実装にしている処理系も存在する可能性があるにはある」かも知れませんが、本来、返されるのは「真(空ではない何か)」と「偽(空)」です。 処理系によっては「パターンに一致したら、固定で『1』という値を返す」かも知れません。 結論は ・$bには、真(空ではない何か。何が入るかは不定)か、偽(空)が入る ・/gを付けると何が起こるか判らない(処理系に依存する。結果は不定) と言うことです。
お礼
>・$bには、真(空ではない何か。何が入るかは不定)か、偽(空)が入る >・/gを付けると何が起こるか判らない(処理系に依存する。結果は不定) そういわれてみると確かにIF()の中で使われているので 真か偽に気付くべきでした。 このような基本的なことの調べ方が まだよく分からなくて困っていました。 ありがとうございました。