「"」や「'」を出力する
では次に、こんな風に出力したい場合はどうしたらよいでしょうか?太郎 君は言いました。"僕は1.01533150573662 ドル持ってるんだ!"出力の中にダブルクオートが入っています。さらに、変数展開もしたいです。
この場合、以下のどちらもうまくいきません。
ダブルクオートを使うパターン(エラー)
print "$name 君は言いました。"僕は$usd_per_yen ドル持ってるんだ!"\n";シングルクオートを使うパターン(エラー)
print '$name 君は言いました。"僕は$usd_per_yen ドル持ってるんだ!" ',"\n";ダブルクオートを使うパターンだと「"$name 君は言いました。"」の部分で出力文字列が切れたと解釈され、残りの部分がプログラムに無い命令としてエラーになります。また、シングルクオートを使うパターンでは変数展開がされません。
このような時は、もうお分かりですね。エスケープです。
print "$name 君は言いました。\"僕は$usd_per_yen ドル持ってるんだ!\"\n";エスケープする事により、「"」が持っている「出力文字列を囲う」という機能が無くなりますので、以下のように出力されます。
太郎 君は言いました。"僕は1.01533150573662 ドル持ってるんだ!"これで万事解決です。...が、またいちいちエスケープするのはすこし面倒くさくないですか?面倒くさいでしょう?
クオートの代わりに使える記号
Perl では "..." の代わりに qq{...} が、'...' の代わりに q{...} が使えます。qq{...} と q{...} はそれぞれ "..." と '...' と同じ意味ですが、" と ' を文字そのものとして扱ってくれる点だけが異なり、このためこれらの文字のエスケープの必要が無くなります。print qq{$name 君は言いました。"僕は$usd_per_yen ドル持ってるんだ!"\n}; print q{$name 君は言いました。"僕は$usd_per_yen ドル持ってるんだ!"},"\n";「"」をエスケープしなくても、この出力は以下のようになります。
太郎 君は言いました。"僕は1.01533150573662 ドル持ってるんだ!" $name 君は言いました。"僕は$usd_per_yen ドル持ってるんだ!"このような記法を覚えておくと、CGI プログラムなど、記号の出力をたくさんしなければならないプログラムを書く時に重宝します。