我想在文件打开命令中传递两个文件名,这样如果一个文件不存在,它应该打开另一个文件。有没有办法在一个打开的命令中做到这一点?下面是我的代码:
open FILE, "/Library/xampp/Documents/$var"
我想传递 $var 使其具有 xxx | /图书馆/文档/xyz。有没有办法做到这一点?
这有帮助吗?
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 $!;
如果我正确理解了这个问题,是的,您可以提供$var
为“../../../any/arbitrary/file”并打开一个不在“/Library/xampp/Documents”下的文件(尽管如果图书馆, xampp 或 Documents 是链接而不是文件,您可能需要不同数量的 ..s)。
您正在尝试查找给定绝对路径或相对于当前工作目录以外的目录的路径的文件的路径。
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
可以/Library/xampp/Documents
,但我不喜欢那样做。
首先检查文件是否存在,如果它没有选择不同的路径。然后打开那条路
my $path= -e $ARGV[0] ? $ARGV[0] : "default"
open(my $fh, $path) || die "$path $!"