2013-04-21 55 views
-1

我想在文件打開命令中輸入兩個文件名,這樣如果一個文件不存在,它應該打開另一個文件。 有沒有辦法在一個打開的命令中執行它?以下是我的代碼:如何在打開的命令中輸入OR文件名

open FILE, "/Library/xampp/Documents/$var" 

我想傳遞$ var,使它具有xxx | /庫/文件/ XYZ。有沒有辦法做到這一點?

+1

是的,這是可能的,因爲你可以重載'* CORE :: GLOBAL :: open = \&some_sneaky_open_emulator',但我建議反對,除*在extremis *,然後只有一個仔細時間的本地'覆蓋。 – tchrist 2013-04-21 19:13:19

+0

其實我試圖找到代碼中的漏洞。所以我想測試一下,如果我可以給$ var一個值,如果該文件不存在於/ Library/xampp/Documents中,那麼它應該打開另一個現有文件,我在$ var中提供輸入。 – user1247412 2013-04-21 19:18:46

+2

請將該評論添加到問題的正文中。這是相當重要的一部分。 – ysth 2013-04-21 19:19:53

回答

1

如果我理解正確的問題,是的,你可以提供$var爲 「../../../any/arbitrary/file」,並打開一個文件這不在「/ Library/xampp/Documents」下面(儘管如果Library,xampp或Documents是鏈接而不是文件,您可能需要不同數量的..s)。

3

這有幫助嗎?

my $fh; 

open $fh, '<', '/Library/xampp/Documents/xxx' 
    or open $fh, '<', '/Library/Documents/xyz' 
    or die "Unable to open files for reading: $!"; 

或許

use List::Util 'first'; 

my @files = qw(/Library/xampp/Documents/xxx /Library/Documents/xyz); 

open my $fh, '<', first { -f } @files or die $!; 
+0

這似乎不是最佳做法 – 2013-04-21 18:27:47

+0

行。其實我想通過它作爲用戶輸入。而且我想在不對代碼進行任何更改的情況下使用打開的FILE,「/ Library/xampp/Documents/$ var」。 – user1247412 2013-04-21 18:31:16

+1

啊。然後不 - 如果你不能改變Perl代碼,那麼你不能這樣做。 – Borodin 2013-04-21 18:39:30

0

檢查文件是否存在,如果沒有選擇不同的路徑。 然後打開路徑

my $path= -e $ARGV[0] ? $ARGV[0] : "default" 

open(my $fh, $path) || die "$path $!" 
1

你正在努力尋找的路徑,給出一個絕對路徑或相對比當前工作目錄的目錄路徑的文件。

use Path::Class qw(dir file); 

my $file_qfn = 'xxx';      # /Library/xampp/Documents/xxx 
    -or- 
my $file_qfn = '/Library/Documents/xyz';  # /Library/Documents/xyz 
    -or- 
my $file_qfn = '../Docs/zzz';    # /Library/Docs/xampp/zzz 

my $abs_file_qfn = file($file_qfn)->absolute(dir('/Library/xampp/Documents')); 

open(my $fh, '<', $abs_file_qfn) 
    or die("Can't open \"$abs_file_qfn\": $!\n"); 

你也chdir到​​,但我不喜歡這樣做。