アメリエフの技術ブログ

Amelieff Staff Blog

or dieよりもautodieがナウい

こんにちは、朝ごはんはパン派の久保(kubor)です。
みなさん、Perl書いてますか?

文字列処理が得意なPerlの使いドコロといえば、FASTQファイルを処理したり、TSVファイルを処理したり、とにかくファイル操作が多いです。
Perlでは、ファイルハンドルの作成に、open関数を使いますが、
この時、ファイルを読み込めたかどうかをチェックしたい場合が多いです。

よく書くのが以下の例です。

[selfDie.pl]
open my $FH_HOGE, '<', $ARGV[0] or die "Error: Cannot open $ARGV[0]"

これでも良いのですが、複数のファイルを開いたり、閉じたり、
開いたりしていると、「or die "Error: Cannot open $ARGV[0]"」を何回も書くのは、煩わしくなってきます。

そんなときは、冒頭で「use autodie;」と書いておきましょう。
「autodie」は標準モジュールなのですが、組み込み関数の例外を上手く処理してくれる大変便利なモジュールです。

[spewDie.pl]
use autodie;
open my $FH_HOGE, '<', $ARGV[0]
これを実行すると
perl spewDie.pl hoge.txt
Can't open 'hoge.txt' for reading: 'そのようなファイルやディレクトリはありません' at sampleperl.pl line 3
このように勝手にdieしてくれます。
素敵ですね。
use strict;
use warnings;
use autodie;
use utf8;
僕は、この4つをテンプレートに入れています。
例外処理を細かく書かないのであれば、とりあえず書いておくのがお勧めです。