添付ファイル付きのメールを作成・送信するオレオレスクリプトを作ってて、ファイル名とかの扱いが簡単そうだったのでPath::Classを使ってみた。添付ファイルの読み込みもPath::Class(::File)のslurp()でやろうとしたのだけど、バイナリ・ファイルを添付する時にbinmodeして読み込む方法がわからなくちょっと困った。そしてどうやるのが正解なのかまだわからない……。

Path::Class(::File)のslurp()を含むopen()関連のメソッドはIO::Fileを使っているようなので、こういう風に書けばとりあえず目的は達成できるらしい。

use Path::Class;

my $file = file("foo.png");
my $fh = $file->openr();
$fh->binmode();
local $/;
my $content = <$fh>;

slurp()のコード読んで一行追加しただけ。

use Path::Class;

my $file = file("foo.png");
my $content = $file->slurp(binmode => 1);

とか書きたい。