- ベストアンサー
プログラムについて
いつもお世話になっております。 以下のようなPerlのプログラムがあるのですが、 何の処理を行っているのかよく分かりません。 分かる方がいらっしゃれば、教えて頂けますでしょうか? (プログラム内容) $param{back} =~ /^\d+$/ or $str =~ s/<!--back start-->.+<!--back end-->//g; この処理は、$param{back} =~ /^\d+$/の結果により、 以下の処理を行うという意味なのでしょうか? 数字から始まる文字である → 何もしない。 数字から始まる文字でない → $str =~ s/<!--back start-->.+<!--back end-->//gの処理をする。 以上です。 よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まあ、大体はANo.1さんとANo.2さんの回答でOKですが、上記の場合は こう言い換えた方が分かりやすいかもしれません。 $param{back} に数字以外が含まれていたら $str =~ s/<!--back start-->.+<!--back end-->//g を実行する。 Perlは式の結果(trueかfalseか)によってorまたはand演算子で つなげていくことができます。 openでよく見ますよね。 open(FILE, 'FILENAME') || die('ファイルが開けません'); みたいな感じのはopen関数はファイルを開くことに成功した場合 trueを返し、失敗するとfalseを返すため、成功すれば式中のor以降は 実行されず、失敗すればor以降が実行されます。 なお、上記の記述は少々欠陥がありますね。 もし、 $str の中に <!--back end--> が1つだけ含まれている場合なら 問題ないのですが、複数含まれている場合は最後まで置換してしまいます。 (わざとである場合もあるかも) $str =~ s/<!--back start-->.+?<!--back end-->//g とした方がいいと思いますが...。
その他の回答 (2)
- _--_--_-_-
- ベストアンサー率47% (8/17)
以下のコードも同じ動作をします。 unless ($param{back} =~ /^\d+$/) { $str =~ s/<!--back start-->.+<!--back end-->//g; }
- sakusaker7
- ベストアンサー率62% (800/1280)
or の左の置換が行われれば右の置換は行わない。 左が行われていなければ右のを行う。ということで >この処理は、$param{back} =~ /^\d+$/の結果により、 >以下の処理を行うという意味なのでしょうか? >数字から始まる文字である → 何もしない。 >数字から始まる文字でない → $str =~ s/<!--back start-->.+<!--back end-->//gの処理をする。 数字から始まる、じゃなくて文字列全体が数字の場合ですがその通りです。