[解決済み] perlの<<'m'=~m>>構文は何を意味するのでしょうか?
質問
Perlは変わった構文が多いことは理解しているのですが、先日仕事中にあるコードスニペットに出会ってしまい、混乱したままになっています。誰かそれが何を意味するのか私に説明してください。
<<'m'=~m>>
print $a unless $b;
return;
m
;
HEREDOC構文に似ていますが、私が見たことのある形ではありません。
どのように解決するのですか?
これは 秘密 という構文で知られています。 かざりつけの二刀流 と表記されるのが一般的です。
<<m=~m>>
Comments here
m
;
これは、複数行のコメントをハックするためのものです。
ヘルドック
構文とマッチ演算子 (
=~
) と
>
をデリミタとする。
注、スラッシュとして
/
というスラッシュはマッチングの区切り文字として使われないので、'm' 演算子が必要である。例えば
$my_var =~ /test/
は次のようになります。
$my_var =~ m>test>
と同じですが、一方
$my_var =~ >test>
は無効となります。
最初の
m
の文字がシングルクォートで囲まれていることに注意してください。
$a
と
$b
のような変数は補間されません。もしこれらの引用符が省略されていたら(私が提供したコード例のように)、Perl は自動的にエンドマーカーに二重引用符を追加し、それ以降の変数はすべて補間されるでしょう。この場合
$a
と
$b
は定義されなくなったので
use warnings;
.
上の装飾的な二重刃の例をわかりやすくするために(それでもお勧めしませんが)、こう書くことができます。
<<"END" =~ //
Comments here
END
;
なお
=~ //
は冗長なので、これと等価である。
<<"END";
Comments here
END
これは void コンテキストでの標準的な heredoc 構文に過ぎません。
voidコンテキストで文字列を持つことは問題を引き起こす可能性があるため、実運用コードでこれを使用することはお勧めしません。さらに、このコードは最も経験豊富なPerlプログラマでさえも頭を悩ませるものであり、読むのもメンテナンスするのも無意味に難しいのです! もし適切な複数行のコメントを作成したいのであれば、ここで説明されているようにPodに固執することをお勧めします。 Perl で複数行のコメントを入力するにはどうしたらいいですか?
これですっきりするといいのですが。
関連
-
[解決済み] Perlからロケール設定の警告を修正する方法
-
[解決済み] 最近のPerlはなぜデフォルトでUTF-8を避けるのですか?
-
[解決済み] PerlからUTF-8を出力するにはどうしたらいいですか?
-
[解決済み] なぜPerl 5の関数プロトタイプはダメなのか?
-
[解決済み] なぜstrictとwarningを使うのか?
-
[解決済み] Perlで変数が数値を持っているかどうかを判断するには?
-
[解決済み] unixで任意のスクリプトをデーモン化するには?
-
[解決済み] use utf8;を使用すると「印刷時の文字が太い」と言われる
-
[解決済み] 非 root ユーザーで CPAN を使用するにはどうすればよいですか?
-
[解決済み] Perlでミリ秒単位でスリープさせるには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Perlで複数行のコメントを入力するにはどうしたらいいですか?[重複している]。
-
[解決済み] PerlからUTF-8を出力するにはどうしたらいいですか?
-
[解決済み] Perlでファイルが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] なぜPerl 5の関数プロトタイプはダメなのか?
-
[解決済み] なぜstrictとwarningを使うのか?
-
[解決済み] インストールされているCPANモジュールの一覧を取得するにはどうすればよいですか?
-
[解決済み] unixで任意のスクリプトをデーモン化するには?
-
[解決済み] Perl で、$variable が定義され、長さが 0 でない文字列を含んでいるかどうかを簡潔に確認するにはどうしたらよいですか?
-
[解決済み] 非 root ユーザーで CPAN を使用するにはどうすればよいですか?
-
[解決済み] cpan`経由でインストールしたPerlモジュールをデインストールするにはどうすればよいですか?