2007年02月23日
スマートなPerlのススメ @ ウェブ
最近CGIの改造を依頼されて久々にPerlを書いているのですが、他人の書いたソースコードは良くも悪くも勉強になります。
Perlは人によって書き方が大きく違う事があるのですが、その中でも、ifとprintの使い方が、ソースの視認性に大きく影響します。
例えば、ループしている処理の中、ifで処理を分ける事は良くありますが、頻繁に見る書き方がこれ。
if($flag eq "1"){
...
}
文法的に間違いではないですし、悪くはないのですが、もっとスッキリ書けます。
next if($flag ne "1");
これだけ。余計なインデントが生じないし、非常にスッキリします。この書式は他の所でも使えるので、頻繁に出てくるprintに使えば、行数を少なくできてスッキリします。
if($flag eq "1"){
print "hogehoge";
}
だとしたら、書き換えると
print "hogehoge" if($flag eq "1");
こんな感じ。
後ろに条件が来るので見慣れないと、戸惑うかも知れませんが、行数や文字数を減らせるので、Perlの様なスクリプトには色々な意味で有利です。
更に書き方のことですが、printでHTMLを出力する場合、
print "<html>\n<body>\n</body>\n</html>\n";
なんて書く事になると思いますが、これでは余計な文字が入って視認性が悪いです。で、これ。
print <<"__HTML__";
<html>
<body>
</body>
</html>
__HTML__
行数が増えてしまいますが、こちらの方が何かと便利。HTMLエディタなどのソースをそのままコピーペーストできます。
本当は見た目とプログラムのロジックは分離した方が良いんですけどね。HTMLテンプレートみたいなモノを作ってそれをCGIで読み込んで処理して表示。と言った感じ。自分が最初から作る場合はDreamweaverでテンプレートを作って、それをCGIで使えるように作ります。
そう言えば、
if($flag eq "1"){print "hogehoge"};
とか、
if($flag eq "1"){
print "hogehoge"
};
こんな書き方をしているのを見たのですが、これってなに?これでも動くけどさぁ。気持ち悪いです。「{」と「}」は要らないでしょ。
関連日記
- 2004年09月19日 フジグラン緑井に出店する店舗 (24032)@ 広島
- 2006年11月29日 大量にあるswfの縦横幅の調べ方 (7772)@ Flash
- 2006年04月23日 cgi-bin/minibbs/$ENV{SCRIPT_NAME}?log=$cmd{log} (6627)@ ウェブ
- 2007年07月28日 ソケット通信と外部プログラム呼び出し (4957)@ Flash
- 2006年04月27日 たけしのコマネチ大学数学科「モンテカルロ法」 (4197)@ テレビ
- 2006年04月20日 たけしのコマネチ大学数学科 (3553)@ テレビ
- 2009年02月09日 UNIX time が「1234567890」 (3534)@ Linux
- 2009年01月22日 RTMP仕様公開 (3426)@ Flash
- 2006年07月02日 Plaggerインストール (3211)@ Mac
- 2007年08月28日 ADDT:ファイルリストレコードセット2 (3038)@ Mac
- 2009年02月22日 昨日は第10回『Webさわり会議』でした (3031)@ 雑
- 2008年03月22日 Komodo Edit (2948)@ Mac
- 2005年03月13日 FileMerge (2889)@ Mac
- 2011年03月20日 PerlでparseInt (2689)@ Mac
- 2002年09月23日 Zopeのプロダクト (2661)@ Linux
- 2006年07月01日 mixiミュージックへの情報送信 (2607)@ Mac
- 2011年03月20日 GeoHex V3をPerlに移植 (2543)@ ウェブ
- 2002年09月29日 Shade6の新機能 (2524)@ Shade
- 2002年09月17日 郵便番号 (2514)@ Linux
- 2003年09月27日 Dreamweaver+PHAkt+PostgreSQL (2456)@ Mac
- 2006年11月06日 awkでファイル名を小文字に (2416)@ Mac
- 2002年09月21日 Python (2407)@ Linux
- 2009年01月23日 The 25-Line ActionScript Contest January 2009 Finalists (2372)@ Flash
- 2004年08月24日 SNS色々 (2368)@ ウェブ
- 2010年10月25日 NSPredicate (2303)@ Mac
- 2006年01月23日 MX Kollectionで日本語メール (2295)@ Mac
- 2007年05月08日 TextMate (2246)@ Mac
- 2004年12月05日 Perlモジュール/WWW::Mixi (2212)@ ウェブ
- 2002年09月17日 PerlでPostgreSQL (2193)@ Linux
- 2004年01月13日 関心空間の情報をRSS化するCGI (2191)@ ウェブ
アマゾン広告
この日記ページは閲覧数などの条件に応じて、閲覧制限を行っています。他からリンクしていただいても、そのリンクから辿った閲覧者が当ページの内容をご覧頂けない場合があります。ご了承下さい。