2013-04-17 80 views
6

我有一個perl腳本,它打開一個文件並在其中寫入一些數據。有時這個文件在某些​​機器上只具有隻讀權限。對於這種情況,目前腳本因無法打開文件而死亡。我的要求是,在這種情況下,我希望我的腳本繼續,而不是將文件寫入文件,將其放入STDOUT。我將使用warn而不是die,但我想知道我可以將我的文件句柄FILE1別名爲STDOUT,這樣我就不必修改剩餘的代碼,原因在於我的實際代碼print FILE1 <>存在於許多地方,並且不是我可能把if\else條件無處不在。我希望我會別名FILE1STDOUT,這樣打印語句將以STDOUT輸出或寫入文件,具體取決於文件句柄FILE1中設置的值。是否有可能使用Perl?別名文件句柄到STDOUT perl

$file = "testfile.txt"; 
open(FILE1, ">> $file") or die "Can not read file $file: $! \n"; 
print FILE1 "Line1 \n"; 
print FILE1 "Line2 \n"; 
print FILE1 "Line3 \n"; 
print FILE1 "Line4 \n"; 
close FILE1 
+0

可能的複製http://stackoverflow.com/questions/3807231/how-can- i-test-if-i-can-write-to-a-filehandle – devnull

回答

13

您可以使用*FILE1 = STDOUT;這樣做。

前面的*的變量稱爲typeglobs。閱讀關於他們here

你也可能要開始使用lexical file handles

這是我將如何解決你的問題:的

use strict; 
use warnings; 

my $file = "testfile.txt"; 
my $succ = open(my $fh , '>>', $file); 

$fh = *STDOUT unless $succ; 

print $fh "Line1 \n"; 
print $fh "Line2 \n"; 
print $fh "Line3 \n"; 
print $fh "Line4 \n"; 

close $fh if $succ; # don't close STDOUT 
+0

我剛剛在打開語句後添加了這段代碼,它工作正常。你能否告訴我如何檢查文件句柄是否可以成功打開。現在,即使文件是可訪問的,它只是在STDOUT中打印文本,而不是在文件中。 – sarbjit

+2

'open(FILE1,「>> $ file」)或* FILE1 = STDOUT;'會是一個非常簡單的方法。 – 2013-04-17 13:18:00

+0

@ dan1111您如何區分指向STDOUT的FILE1指向$文件的FILE1?我只是想知道,因爲關閉STDOUT可能不是一個好主意。 – tauli

相關問題