ヒアドキュメント中の"に\は必要?

[上に] [前に] [次に]
カブリ 1999/11/27(土) 09:19:54
print文の中のダブルクォートの前には\をつけますが、
ヒアドキュメント文中のダブルクォートの前にも
\を付けた方がいいですか?
こんな風に。

print <<"EOF";
Content-type: text/html\n
<html>
<font size=\"+2\">
テスト
</font>
</html>
EOF

付けないで良い、みたいな事を他のスレッドで見かけましたが
実際の所はどうでしょう?
ヒアドキュメント自体よく分かっていないというのも
ありますが…

J.Naka 1999/11/27(土) 10:18:27
" を、\" とするのは、" が文法要素になる局面で " 自体を含めたい場合の回避手段です。
ヒアドキュメント以外のprint文における " は関数printの引数の先端と終端を表す物と文法上定義されているので、\" が必要になるわけです。
が、ヒアドキュメントでは、" は文法上定義されていないので、単独で文字列に含めても、そのまま出力されると言う事になります。

結論は、ヒアドキュメント内では " を \" にする必要はありません。

カブリ 1999/11/27(土) 10:40:32
[[解決]]
ありがとうございます。
よく分かりました(^^)

Perl初心者 1999/11/27(土) 11:08:33
ヒアドキュメント内の
<font size=\"+2\">
の\は不要とのことですが、あるとどうなります!

また、ヒアドキュメント内の \n はどうなります!

しなのむし 1999/11/27(土) 11:53:16
>ヒアドキュメント内の
><font size=\"+2\">
>の\は不要とのことですが、あるとどうなります!
>また、ヒアドキュメント内の \n はどうなります!

聞くよりも自分で実際に試してみるのが一番。↑

print <<'EOF';
という手も有りまっせ。

カブリ 1999/11/27(土) 12:01:01
うちは
<font size=\"+2\">
とやると\が消えて表示されました。
\n とやると \n 自体が表示されませんでした。
Windows環境にて。

しなのむし 1999/11/27(土) 12:22:47
カブリさん

>\n とやると \n 自体が表示されませんでした。
表示されないというか、改行として効いていませんか?

print <<"EOF";(逆スラッシュの解釈と変数の展開が行われる)
print <<EOF;(print <<"EOF";と同じ。)
print <<'EOF';(逆スラッシュの解釈と変数の展開は行われない)

Perl初心者 1999/11/27(土) 12:27:00
しなのむし さん
>表示されないというか、改行として効いていませんか?
効いていました!
\のみは全く無視です!

カブリ 1999/11/27(土) 13:05:58
>改行として効いていませんか?
効いてました。HTMLから見てたので気付かなかったんですね ^^;)
ソースで確認しました。

ん〜 1999/11/27(土) 14:10:43
まえ〜に
print <<"EOF";とやったときに
@マークがあるとエラーがでてました。
エスケープしたらなおったったんですけども。

ジェンウェイ大佐 1999/11/27(土) 18:34:10
print <<"EOF";
のなかに「@」を入れると、Perl5だと配列とみなすために
エラーになるはず。
print <<"EOF"; と print "";
は同じ扱いになりますから。""のなかでは@はエスケープしないと使えません。
print <<'EOF'; のなかでは@はエスケープしなくても使えます。

ん〜 1999/11/30(火) 10:22:28
なるほど。
いろいろできるがゆえのジレンマですね。
#ちがうような・・

[上に] [前に] [次に]