2013-04-21 57 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到​​,但我不喜欢这样做。