はまちや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とかも好きな具合でインデントさせられる感じ?

とにかく「俺はヒアドキュメントもエディタで色分けしてるぜー」なんてツッコミはなしで頼むぜ!
だって頭にイゲタが並んでるほうがかわいいじゃんばか!!!!!

トラックバック

この日記へのトラックバックURL: http://mxxi.hamachiya.com/mt-tb.cgi/7

コメント

はまちや2 2005/11/16 [19:02]

追記を書いてみましたよ。
http://mxxi.hamachiya.com/2005/11/post_5.html


Powered by BEARS SERVER PROJECT.