masatoの日記

やっていきます

Tie::Fileでテキストファイルをもっとかんたんに配列のように扱う

テキストファイルを全部読み込んで(または読込ながら)、文字列に処理を加える機会は多いと思います。

そんなとき、普通にテキストファイルを読みこむこともできるのですが、Tie::Fileモジュールを使うともっと簡単でした。

これもまたPerlクックブックで発見しました(ボリューム1)。

ちなみにTie::FileモジュールはPerlバージョン5.8以降で標準モジュールとして組み込まれています。

my @lines = ();
my $file_name = 'f1.txt';

tie @lines, "Tie::File", $file_name or die "Can't tie to $file_name: $!\n";

# 逆順にしてみる
@lines = reverse @lines;

# 特定の文字列を含む行をろ過
my @filtered = grep { /perl/i } @lines;
print "Found: @filtered\n";

# 行数(配列の要素数)
print "Line count: $#lines";

1行でテキストファイルを変数に入れられるですごいラク。

つまづきポイント

use strictしている場合、ファイルを読み込むときにTie::Fileをダブルクオートで囲む必要がありました。

Perlクックブックのサンプルコードでは、裸で使用されていたので、そのとおりやってみたら、Bareword "Tie::File" not allowed while "strict subs"というエラーをもらいました。