2012-01-05 17 views
2

perlで6(6)の一時ファイルを作成し、 `system())の呼び出しの名前を取得するにはどうすればよいですか?perlに複数の一時ファイルを作成する

私は、この擬似コードを最適化したい:

my $TEMP0 = new File::Temp(UNLINK => 0); 
system("PROGRAM0 --output $TEMP0"); 
my $TEMP1 = new File::Temp(UNLINK => 0); 
system("PROGRAM1 --input $TEMP0 --output $TEMP1"); 
my $TEMP2 = new File::Temp(UNLINK => 0); 
system("PROGRAM2 --input $TEMP0 --output $TEMP2"); 
my $TEMP3 = new File::Temp(UNLINK => 0); 
system("PROGRAM3 --input $TEMP1 $TEMP2 --output $TEMP3"); 
my $TEMP4 = new File::Temp(UNLINK => 0); 
system("PROGRAM4 --input $TEMP3 --output $TEMP4"); 
my $TEMP5 = new File::Temp(UNLINK => 0); 
system("PROGRAM4 --input $TEMP4 --output $TEMP5"); 

、最後には、一時ファイルのすべてのリンクを解除:

unlink($TEMP0); 
unlink($TEMP1); 
unlink($TEMP2); 
unlink($TEMP3); 
unlink($TEMP4); 
unlink($TEMP5); 

答えて

4

あなたは一時ファイルを生成する範囲でマップを使用することができます。例えば。

my @tempfiles = map { new File::Temp(UNLINK => 0) } 1..6; 

プログラムが呼ばれる方法で設定したパターンが存在しないので、システムへの個別の呼び出しとしてそれらを保つために合理的なようです。

-1
my @tempfiles = map { new File::Temp(UNLINK => 0) } 1 .. 6; 

system("PROGRAM0 --output $tempfiles[0]"); 

for (my $i = 1 ; $i <= $#tempfiles ; $i++) { 
    system("PROGRAM0 --output ", $tempfiles[$i], " --input ", $tempfiles[ $i - 1 ]); 
} 

unlink(@tempfiles); 
2

これは、ファイルがリンクしたいまでちょうど周り@tempfilesを維持し、正常に動作する必要があります。

my @tempfiles = map { 
    File::Temp->new(UNLINK => 1, use_exlock => 0); 
} 0..5; 

system("PROGRAM0 --output $tempfile[0]"); 
system("PROGRAM1 --input $tempfile[0] --output $tempfile[1]"); 
system("PROGRAM2 --input $tempfile[0] --output $tempfile[2]"); 
system("PROGRAM3 --input $tempfile[1] $tempfile[2] --output $tempfile[3]"); 
system("PROGRAM4 --input $tempfile[3] --output $tempfile[4]"); 
system("PROGRAM4 --input $tempfile[4] --output $tempfile[5]"); 

... 

undef @tempfiles; # unlink all 

それは実際に、いくつかの内部名に関連するファイルのためのより多くの意味を成して、このようにそれを記述した場合:

my %tempfiles = map{ 
    $_ => File::Temp->new(UNLINK => 1, use_exlock => 0); 
} qw'zero one two three four five'; 


system("PROGRAM0 --output $tempfile{zero}"); 
system("PROGRAM1 --input $tempfile{zero} --output $tempfile{one}"); 
system("PROGRAM2 --input $tempfile{zero} --output $tempfile{two}"); 
system("PROGRAM3 --input $tempfile{one} $tempfile{two} --output $tempfile{three}"); 
system("PROGRAM4 --input $tempfile{three} --output $tempfile{four}"); 
system("PROGRAM4 --input $tempfile{four} --output $tempfile{five}"); 

... 

undef %tempfiles; # unlink all 
関連する問題