« HDE Anti-Virusのlogrotateにミス | メイン | Operaがlivedoorつづき。 »

File::Tempが便利

File::Tempが便利

一時ファイルを作る場合、IO::Fileのnew_tmpfileではファイル名が取得できないが、File::Tempではファイル名を取得することができる。
作ったファイルは特に宣言をしない限り、プログラム終了とともに削除される。

use File::Temp ();
$fh = File::Temp->new;
$fname = $fh->filename;


こんな感じ。

Image::Magickと組み合わせて使うと、
$dataには画像データが入っているとして、

my $fh = File::Temp->new or die "一時ファイルがつくれませんでした。";
$fh->print($data);
$fh->flush;
	
my $image = Image::Magick->new;
$x = $image->Read($fh->filename);
		
my $tn = File::Temp->new(SUFFIX=>".jpg")
	or die "一時ファイルがつくれませんでした。";
$x = $image->Write(filename=>$tn->filename);
die "画像の一時保存ができませんでした" if "$x";	
	
my $new_data = join("",$tn->getlines);


と、「SUFFIX=>".jpg"」とすることで拡張子を決め打ちでき、Image::Magickから目的とするフォーマットで出力も安定してできる。