- ベストアンサー
qq!!の意味を教えてください。
perlでCGIを勉強していたらprint qq!!;という文がでてきました。qqは調べたらダブルコーテーションだと書いてありましたが、「!」はどういう意味をなしているのですか?はずかしながら今日はじめてqq!!をみたのですが、これはperlでは一般的な書き方なのでしょうか? そちらもあわせて教えてくだされば幸いです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> qqは調べたらダブルコーテーションだと書いてありましたが qqがそのままダブルクォーテーションを意味するわけではなく、「引用の一般化表記」というやつです。 ダブルクォーテーションで囲むのと同じ結果になる、別の書き方です。 なぜそんなものがあるのか、普通にダブルクォーテーションで囲めば良いのでは? と思うかもしれませんが、たとえば、 <a href="$url" target="_blank"><img src="$button_img" alt="Link" border="0"></a> なんていうデータを変数に代入したい場合、大変面倒ですよね。 $anc = "<a href=\"$url\" target=\"_blank\"><img src=\"$button_img\" alt=\"Link\" border=\"0\"></a>"; いちいちこう書くよりも、 $anc = qq!<a href="$url" target="_blank"><img src="$button_img" alt="Link" border="0"></a>!; と書いた方が楽ですし見やすいです。 ちなみに、囲み文字に「 ! 」を指定してありますが、個人的にちょっと見にくいような気がします。一般的に qq|~| qq/~/ が多いのではないでしょうか。 また、qq以外にも、 q|~| qx|~| qw|~| があります。 それぞれの意味はご自分で調べられたほうが理解が深まるかと思います。
その他の回答 (3)
- hara_peko
- ベストアンサー率28% (11/38)
参考URLの Quote and Quote-like Operators 以下を参照してみてください。
追記。 #1です。 下記に qq に続く文字は半角記号であれば何でもいいと書きましたが、カッコの類の場合は扱いが変わるようです。 print qq[abc[; print qq(abc(; こんなこともできるのかと思ったら、カッコ記号の場合は、 print qq[abc]; print qq(abc); こういうふうに囲まないと駄目みたいです。 (言ってる意味が分からなかったら無視して構いません(^_^; 文字列を扱うのに qq コマンドを使うことは滅多にありませんから)
qqは、それに続く文字を「囲み記号」として扱うことを表す文字列表記コマンドです。 たとえば、qq!! の場合、"!" を囲み記号とした空文字列ということになります。 このとき qq に続く文字は半角記号であればなんでもよく、たとえば print qq,abc,; とすると、"," を囲み記号として扱うので、結果として画面には "abc" と表示されます。 これは、一般的な "" による文字列では、" を \" と表記しなければいけなかったりと色々面倒だから作られたものです。