道草日記

通勤幾星霜…寄り道回り道の日記です。

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

Perlのヒアドキュメントの色々

2014-04-28 | 

●Perlのヒアドキュメントとはそもそも

 妙な記述形式なので誤解されるが、ヒアドキュメントは引用方法の特殊形であり、EOSなどの文字列は一時的なカッコにすぎない。
つまり、print "This is a pen."; を
#---------------
prrint <<"EOS";
This is a pen.
EOS
#---------------
と表現したにすぎない。 

○ 指定文字列(ここの例ではEOS)までの間をそのまま出力する。
○ EOS等の文字列は、直近までなのでファイル内で繰り返し使える。
○ "EOS"; のように" "で囲むと、内部の変数を展開して出力。' 'の場合は展開しない。
○ 展開したい変数と地の文字列が引っ付く場合は{ }で囲むと区別される。$name→${name}

#--------------------------------------------------
# ① ファイルに出力

print WR <<"EOS";
こんにちは
私は${name}です。
よろしく!
EOS

#--------------------------------------------------
# ② 標準出力で出力

print <<"EOS";
さしすせそ。
たちつてと。
EOS

#--------------------------------------------------
# ③ 通常変数(スカラ変数)に代入する。イコールを忘れずに!
#   追加は $hoge .= <<"EOS"; でOK

my $hoge = <<"EOS";
いろはにほへ。
ちりぬるを。
EOS
#--------------------------------------------------

●ヒアドキュメントで「Content-type: text/html」を出力する場合

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/pe_kj03.htm

CGIでHTMLを出力する場合、最初に「Content-type: text/html」出力する。
このとき、html本体との間に区切りの「空行」が必要である。
このため通常は print "Content-type: text/html\n\n" と、改行2個を出力する。
ヒアドキュメントの場合は、必ず空行を入れる必要がある。
#---------------------------------------
print <<"EOS";
Content-type: text/html

(ここに空の1行必ず必要!)

<html>
<head>
......
</body>
</html>
EOS
#----------------------------------------

●ヒアドキュメント内に関数を埋め込む

http://perl-users.jp/articles/advent-calendar/2008/14.html

 @{[ &hoge() ]} を使う

#-----------------------------------------
print <<"EOS";
<table>
<tr><td>
   <p>コメント:@{[ &trim($comment,160,'...') ]} </p>
</td></tr>
</table>
EOS
#-----------------------------------------

●ヒアドキュメント出力時に入れ子になるJavaScriptのコード

 Perlのヒアドキュメント中にJavaScriptのコードがあると、トラブルが生じる場合がある。

○変数の意図せざる展開
PerlもJavaScriptも変数は「$」で始まるため、ヒアドキュメント中でPerlが展開してしまう。
これを防ぐにはヒアドキュメントを、 print <<"EOS"; から print <<'EOS'; として
Perlが展開しないようにする。


○引用符
出力するhtml内にJavaScriptなどのコードがあり、その中で引用符がある場合は
入れ子になるので、「\\"」として二回エスケープする必要がある。
-------------------------------------------------------------
<script language="JavaScript">
<!--
function getstr() {
var newstr= "<b style=\\"color:#000000;\\">New!</b>";
//-->
</script>
-------------------------------------------------------------

ジャンル:
ウェブログ
コメント   この記事についてブログを書く
この記事をはてなブックマークに追加
«  Officeリボンのカスタマイズ(1) | トップ |   
最近の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。

あわせて読む

」カテゴリの最新記事