Perlプログラムをコンパクトに記述する方法

文:Nick Gibson(Builder AU) 翻訳校正:村上雅章・野崎裕子
2007-12-25 08:00:00
  • このエントリーをはてなブックマークに追加

 Perlは、複雑なコマンドを非常に短いコードで記述できる言語として有名である。本記事では、Perlについての前回の記事に引き続き、こういったことを可能にするためにPerlではどんなものが用意されているかについて少し解説したい。

 まず、キーボードから入力された文字を読み込み、それをコンソールに出力するという非常に簡単なプログラムを見てみよう。Perlではこういったことを以下のように記述することができる。

while ($line = ) {
    print $line;
}

 このままでも十分コンパクトと言えるこのプログラムは、いったい何を行っているのだろうか?簡単だ。は特殊なファイルハンドルであり、上記の例では標準入力(STDINと呼ばれる)のバッファに対応付けられている。そしてこれは通常キーボードに割り当てられている。が変数$lineに代入されるたびに、STDINのバッファから1行読み込まれ、$lineに格納される。バッファが空になるとEOFが返され、while文はそれを偽として扱う。プログラムの後半は読めば判るといってもよいだろう。print文に到達した時点で変数$lineには入力行が格納されているため、print関数によってその内容が画面に出力されることになる。より正確に言えば、通常は画面に割り当てられている標準出力(STDOUT)のバッファに出力されることになる。標準入力のバッファも標準出力のバッファもリダイレクトすることが可能である。例えばプログラムの出力を格納するために標準出力をファイルにリダイレクトすることができる。しかし、テキストを扱う場合には普通、標準入力と標準出力がそれぞれキーボードと画面に相当すると考えて問題はない。

 このプログラムはこれ以上短くならないと考えている読者の方もおられるかもしれないが、Perlの特殊変数を用いることで、さらに短くすることができるのである。

  • コメント(2件)
#1 大野晋一   2007-12-25 14:06:14
とはいえ、こういうコードをある程度の規模のプロジェクトで使っていると、まわりの人がつらいですよね……
#2 Murakami   2007-12-29 09:58:30
ちゃんとした開発(多人数で行う開発や保守を考慮した開発)を行う際には、こういったコードを記述するべきではないでしょうね。

Perlを生み出したLarry Wall氏は「プログラマの三大美徳とは短気、無精、傲慢だ」と主張していましたから、そういった美徳(?)をサポートするためにこういった省略記法が生み出されたのだと考えています。 要はLarry Wall的使用方法、つまりガリガリとスクリプトを書いて実行後、結果が出たらそのスクリプトは捨ててしまう(必要なのは結果だけ)という「ハッカー的使用法」を行う場合にのみおすすめできる書き方なんだと思います。 ちなみに私は「1度書いたものはもったいない」と思ってしまうクチ(ケチ?)なので、省略記法はあまり使っていません。
  • 新着記事
  • 特集
  • ブログ
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]