はまちや2さんの日記
[Perl] ヒアドキュメントをちょっぴりキレイに2005/11/16 [13:12]
ヒアドキュメントっていうのはアレだよ!
なんかcgiとかのPerlスクリプトの中身を見たことあるひとなら知ってると思うけど、
htmlを出している部分がこんな感じになってたりするやつだね!
my $i = 666;
print<<"_EoD_";
<div>
あなたは $i 番目の勇者様でス…!
</div>
_EoD_
これで _EoD_ までをprintしたりできるから、
printいっぱい並べなくていいしべんりな感じなんだけど、
使いすぎると今度はPerlのソースコードがなんかヤな感じになってきませんか!
ぼぼぼくだけですか!
そこで…
こんな関数を作ってみたんだけど…!
ヒアドキュメントをちょっぴりキレイにするやつ: eatHere()
sub eatHere {
my $target = shift;
my $sym = shift;
my $indent = shift;
$target =~ s/^[^\S\n]+//gm;
$target =~ s/^$sym+//gm;
$indent or do {
$target =~ s/^[^\S\n]+//gm;
};
return $target;
}
使い方はこうだよ!
my $i = 666;
print eatHere(<<"_EoD_", '#');
## <div>
## あなたは $i 番目の勇者様でス…!
## </div>
_EoD_
コメントを色分けしてくれるエディタ使ってるなら、
ヒアドキュメントがコメントと同色になって、僕的には見やすいぜ!
やった!!
変数になんか入れる時に使うならこんな感じだよ!
my $i = 666;
my $sql = eatHere(<<"_EoD_", '#');
## SELECT
## MYMIXY.ID AS ID,
## MYMIXY.NAME AS NAME
## FROM MYMIXY
## WHERE
## ID = ?
_EoD_
my $sth = $main::dbh->prepare($sql);
$sth->execute($i);
他にもヒアドキュメントってアレだよな!
出力するhtmlをインデントさせようとおもったら
Perlのコードがえらいことになるし、
逆にPerlのコードに合わせてインデントさせてたら、
出力されたhtmlが大変なことになったしりて、もういいやバカとか思ったりとか!
でもコレ、さっきのやり方だと行頭の空白とかタブとかを削っちゃうから、
もし吐き出すやつをインデントさせたいなら、こうすればいいよ!!!
my $i = 666;
print eatHere(<<"_EoD_", '#', 'indent'); # ←3こ目の引数
##<div>
## <p>
## あなたは $i 番目の勇者様でス…!
## </p>
##</div>
_EoD_
これでPerlのコードでインデントしつつ、吐き出すhtmlとかも好きな具合でインデントさせられる感じ?
とにかく「俺はヒアドキュメントもエディタで色分けしてるぜー」なんてツッコミはなしで頼むぜ!
だって頭にイゲタが並んでるほうがかわいいじゃんばか!!!!!
コメント
はまちや2 2005/11/16 [19:02]
追記を書いてみましたよ。
http://mxxi.hamachiya.com/2005/11/post_5.html