我想在文件打开命令中输入两个文件名,这样如果一个文件不存在,它应该打开另一个文件。 有没有办法在一个打开的命令中执行它?以下是我的代码:如何在打开的命令中输入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