2010-10-18 24 views
10

Bir geçici dosya oluşturmak, dosya tanıtıcısına yazmak ve dosya adı ile harici bir program aramak istiyorum.Perl's File :: Temp? 'I nasıl kullanmalıyım?

sorun normalde dosya yazdıktan sonra ve dış programı çağırmadan önce close isteyeyim, ama eğer doğru anlamak close -ing bir tempfile() kaldırılamaz neden olur.

Buradaki çözüm nedir? http://perldoc.perl.org/File/Temp.html itibaren

+0

geliyor. –

+0

ama ben yaparım. Harici programı benim senaryonun içinden arıyorum. Bittikten sonra, dosyaya artık ihtiyacım yok. –

cevap

6

Tamponlama kapalıyken geçici dosyaya yazın. Dosyayı Perl komut dosyasında kapatmadan önce harici programı çağırın ve harici program yazdığınız her şeyi okuyabilecektir. Yapabileceğiniz File::Temp OOP arayüzü ile

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 
+1

Açık dosyaları kullanmanın kontrol edilemeyen bir itmesi var ... ama bu işe yarıyor. –

+0

'$ template' nerede tanımlanır ve neye göre tanımlanır:' File :: Temp 'için resmi belgelerin bile bu boktan parçadan bahsetmez. –

+0

[ile biten] bir dize (https://metacpan.org/source/DAGOLDEN/File-Temp-0.2304/lib/File/Temp.pm#L256) [4 veya daha fazla ardışık 'X'] (https://metacpan.org/source/DAGOLDEN/File-Temp-0.2304/lib/File/Temp.pm#L87) – mob

5

:

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. 

deneyin 0 bunu ayarlamak için.

0

: aslında bir _temporary_ dosyası istemiyormuş gibi

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

`cat $cpp`;