我想在文件打開命令中輸入兩個文件名,這樣如果一個文件不存在,它應該打開另一個文件。 有沒有辦法在一個打開的命令中執行它?以下是我的代碼:如何在打開的命令中輸入OR文件名
open FILE, "/Library/xampp/Documents/$var"
我想傳遞$ var,使它具有xxx | /庫/文件/ XYZ。有沒有辦法做到這一點?
我想在文件打開命令中輸入兩個文件名,這樣如果一個文件不存在,它應該打開另一個文件。 有沒有辦法在一個打開的命令中執行它?以下是我的代碼:如何在打開的命令中輸入OR文件名
open FILE, "/Library/xampp/Documents/$var"
我想傳遞$ var,使它具有xxx | /庫/文件/ XYZ。有沒有辦法做到這一點?
如果我理解正確的問題,是的,你可以提供$var
爲 「../../../any/arbitrary/file」,並打開一個文件這不在「/ Library/xampp/Documents」下面(儘管如果Library,xampp或Documents是鏈接而不是文件,您可能需要不同數量的..s)。
這有幫助嗎?
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 $!;
這似乎不是最佳做法 – 2013-04-21 18:27:47
行。其實我想通過它作爲用戶輸入。而且我想在不對代碼進行任何更改的情況下使用打開的FILE,「/ Library/xampp/Documents/$ var」。 – user1247412 2013-04-21 18:31:16
啊。然後不 - 如果你不能改變Perl代碼,那麼你不能這樣做。 – Borodin 2013-04-21 18:39:30
檢查文件是否存在,如果沒有選擇不同的路徑。 然後打開路徑
my $path= -e $ARGV[0] ? $ARGV[0] : "default"
open(my $fh, $path) || die "$path $!"
你正在努力尋找的路徑,給出一個絕對路徑或相對比當前工作目錄的目錄路徑的文件。
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
到,但我不喜歡這樣做。
是的,這是可能的,因爲你可以重載'* CORE :: GLOBAL :: open = \&some_sneaky_open_emulator',但我建議反對,除*在extremis *,然後只有一個仔細時間的本地'覆蓋。 – tchrist 2013-04-21 19:13:19
其實我試圖找到代碼中的漏洞。所以我想測試一下,如果我可以給$ var一個值,如果該文件不存在於/ Library/xampp/Documents中,那麼它應該打開另一個現有文件,我在$ var中提供輸入。 – user1247412 2013-04-21 19:18:46
請將該評論添加到問題的正文中。這是相當重要的一部分。 – ysth 2013-04-21 19:19:53