重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

いつもお世話になっております。

以下のようなPerlのプログラムがあるのですが、
何の処理を行っているのかよく分かりません。
分かる方がいらっしゃれば、教えて頂けますでしょうか?

(プログラム内容)
$param{back} =~ /^\d+$/ or $str =~ s/<!--back start-->.+<!--back end-->//g;

この処理は、$param{back} =~ /^\d+$/の結果により、
以下の処理を行うという意味なのでしょうか?
数字から始まる文字である → 何もしない。
数字から始まる文字でない → $str =~ s/<!--back start-->.+<!--back end-->//gの処理をする。

以上です。
よろしくお願い致します。

A 回答 (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

とした方がいいと思いますが...。
    • good
    • 0

以下のコードも同じ動作をします。



unless ($param{back} =~ /^\d+$/) {
$str =~ s/<!--back start-->.+<!--back end-->//g;
}
    • good
    • 0

or の左の置換が行われれば右の置換は行わない。


左が行われていなければ右のを行う。ということで

>この処理は、$param{back} =~ /^\d+$/の結果により、
>以下の処理を行うという意味なのでしょうか?
>数字から始まる文字である → 何もしない。
>数字から始まる文字でない → $str =~ s/<!--back start-->.+<!--back end-->//gの処理をする。

数字から始まる、じゃなくて文字列全体が数字の場合ですがその通りです。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!