2013-04-21 3 views
-1

파일 열기 명령에 두 개의 파일 이름을 전달하여 하나의 파일이 없으면 다른 파일을 열어야합니다. 하나의 열기 명령으로이를 수행 할 수있는 방법이 있습니까? 아래 코드는 다음과 같습니다.열기 명령에서 OR 파일 이름을 사용하는 방법

나는 xxx를 가질 수 있도록 $ var를 전달하려고합니다./Library/Documents/xyz. 이 일을 할 수있는 방법이 있습니까?

+1

그렇습니다.'* CORE :: GLOBAL :: open = \ & some_sneaky_open_emulator'를 오버라이드 할 수 있기 때문에 가능 합니다만, 극단적 인 *에서는 제외하고,주의 깊게 임시화 된'local' guard를 사용하는 것이 좋습니다 오버라이드 – tchrist

+0

사실 코드에서 취약점을 찾으려고합니다. 그래서 $ var에 값을 줄 수 있는지 테스트하고 싶습니다. 그 파일이/Library/xampp/Documents에 없으면 $ var에 입력으로 제공하는 다른 기존 파일을 열어야합니다. – user1247412

+2

그 내용을 질문 본문에 추가하십시오. 그것은 오히려 중요한 부분입니다. – ysth

답변

1

는, 그래, 당신은 "../../../any/arbitrary/file"로 $var를 제공하고 파일을 열 수 있습니다 "/ Library/xampp/Documents"아래에 있지 않습니다 (Library, xampp 또는 Documents가 파일이 아닌 링크 인 경우에는 다른 수의 ..가 필요할 수 있습니다).

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

이것은 모범 사례가 아닙니다. –

+0

OK. 사실 나는 이것을 사용자 입력으로 전달하려고합니다. 그리고 내가 코드를 변경하지 않고 "/ Library/xampp/Documents/$ var"열린 파일을 사용하고 싶습니다. – user1247412

+1

아. 그러면 Perl 코드를 변경할 수 없다면 할 수 없습니다. – Borodin

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/Library/xampp/Documents에,하지만 난 그 일을 싫어 수 있습니다.

관련 문제