Создать несколько временных файлов в Perl - PullRequest
2 голосов
/ 05 января 2012

Как мне создать 6 (шесть) временных файлов в perl и получить их имена для вызовов `system ())?

Я хочу оптимизировать этот псевдокод:

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);

Ответы [ 3 ]

4 голосов
/ 05 января 2012

Вы можете использовать карту с диапазоном для генерации временных файлов. например.

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

Поскольку не существует установленного шаблона при вызове программ, представляется разумным хранить их как отдельные вызовы системы.

2 голосов
/ 06 января 2012

Это должно работать нормально, просто держите @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
0 голосов
/ 05 января 2012
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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...