
いつもお世話になっております。
以下のようなPerlのプログラムがあるのですが、
何の処理を行っているのかよく分かりません。
分かる方がいらっしゃれば、教えて頂けますでしょうか?
(プログラム内容)
$param{back} =~ /^\d+$/ or $str =~ s/<!--back start-->.+<!--back end-->//g;
この処理は、$param{back} =~ /^\d+$/の結果により、
以下の処理を行うという意味なのでしょうか?
数字から始まる文字である → 何もしない。
数字から始まる文字でない → $str =~ s/<!--back start-->.+<!--back end-->//gの処理をする。
以上です。
よろしくお願い致します。
No.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
とした方がいいと思いますが...。
No.2
- 回答日時:
以下のコードも同じ動作をします。
unless ($param{back} =~ /^\d+$/) {
$str =~ s/<!--back start-->.+<!--back end-->//g;
}
No.1
- 回答日時:
or の左の置換が行われれば右の置換は行わない。
左が行われていなければ右のを行う。ということで
>この処理は、$param{back} =~ /^\d+$/の結果により、
>以下の処理を行うという意味なのでしょうか?
>数字から始まる文字である → 何もしない。
>数字から始まる文字でない → $str =~ s/<!--back start-->.+<!--back end-->//gの処理をする。
数字から始まる、じゃなくて文字列全体が数字の場合ですがその通りです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「Cancel = True」とはどういう...
-
VB2005 DataGridView上でクリッ...
-
別フォームから戻ったときのイ...
-
数千行HTML 画面表示の性能改善
-
エクセル アプリケーションの...
-
Perlで数値(小数点、負の数、...
-
Youtubeのバグ
-
エクセルのシート上に別のシー...
-
デジタル時計の時刻合わせの方...
-
マイページはどこを開くの
-
一定時間おきにアラームやポッ...
-
スクリプトって、何ですか?ど...
-
Javascript_submit()完了後に処...
-
Outlookでこのような表示がされ...
-
Excelでワードアートや図を常に...
-
ウインドウを毎回同じ位置、大...
-
小さな表示窓の呼び方は
-
大きい表へのスクロールバーの...
-
同じページをブラウザで複数開...
-
ウィンドウの2重起動を防止したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「Cancel = True」とはどういう...
-
別フォームから戻ったときのイ...
-
VB2005 DataGridView上でクリッ...
-
同一の検索値が複数存在する場...
-
excelのタスクバーアイコンが・...
-
処理終了後のに砂時計が、クリ...
-
VBAでグーグルにインデック...
-
VBAでIEの「Web ページからのメ...
-
エクセル アプリケーションの...
-
VC++2010 エディットボックスに...
-
C++での連続した左クリックの禁...
-
時間のかかる処理中にメッセー...
-
ASP DB検索結果の件数を事前表示
-
vba IE操作で こういう事って...
-
Sleep関数の最大時間について
-
マウスオーバー時に効果音を鳴らす
-
cgiを使用して時間制限
-
Perlで数値(小数点、負の数、...
-
【C#】ラベルのダブルクリック...
-
VB6にて、バックグラウンド処理...
おすすめ情報