/ / Jak powinienem używać pliku Perla :: Temp? - perl, pliki tymczasowe

Jak korzystać z pliku Perl: Temp? - perl, pliki tymczasowe

Chciałbym utworzyć plik tymczasowy, napisać do uchwytu pliku, a następnie wywołać program zewnętrzny z nazwą pliku.

Problem polega na tym, że normalnie chciałbym close plik po zapisaniu do niego i przed wywołaniem zewnętrznego programu, ale jeśli dobrze rozumiem close-ing a tempfile() powoduje usunięcie go.

Jakie jest więc rozwiązanie?

Odpowiedzi:

7 dla odpowiedzi № 1

Napisz do pliku tymczasowego z wyłączonym buforowaniem. Wywołaj program zewnętrzny przed zamknięciem pliku w skrypcie Perla, a zewnętrzny program będzie mógł odczytać wszystko, co napisałeś.

use File::Temp qw(tempfile);
use IO::Handle;

my ($fh, $filename) = tempfile( $template, ... );

... make some writes to $fh ...

# flush  but don"t  close  $fh  before launching external command
$fh->flush;
system("/path/to/the/externalCommand --input $filename");

close $fh;
# file is erased when $fh goes out of scope

5 dla odpowiedzi nr 2

Od http://perldoc.perl.org/File/Temp.html:

unlink_on_destroy

Control whether the file is unlinked when the object goes out of scope. The file is removed if this value is true and $KEEP_ALL is not.

1. $fh->unlink_on_destroy( 1 );

Default is for the file to be removed.

Spróbuj to ustawić 0.


0 dla odpowiedzi № 3

z interfejsem OOP File::Temp możesz to zrobić:

my $cpp =  File::Temp->new;
print $cpp "SOME TEXT";
$cpp->flush;

`cat $cpp`;