파일 열기 명령에 두 개의 파일 이름을 전달하여 하나의 파일이 없으면 다른 파일을 열어야합니다. 하나의 열기 명령으로이를 수행 할 수있는 방법이 있습니까? 아래 코드는 다음과 같습니다.열기 명령에서 OR 파일 이름을 사용하는 방법
나는 xxx를 가질 수 있도록 $ var를 전달하려고합니다./Library/Documents/xyz. 이 일을 할 수있는 방법이 있습니까?
파일 열기 명령에 두 개의 파일 이름을 전달하여 하나의 파일이 없으면 다른 파일을 열어야합니다. 하나의 열기 명령으로이를 수행 할 수있는 방법이 있습니까? 아래 코드는 다음과 같습니다.열기 명령에서 OR 파일 이름을 사용하는 방법
나는 xxx를 가질 수 있도록 $ var를 전달하려고합니다./Library/Documents/xyz. 이 일을 할 수있는 방법이 있습니까?
는, 그래, 당신은 "../../../any/arbitrary/file"로 $var
를 제공하고 파일을 열 수 있습니다 "/ Library/xampp/Documents"아래에 있지 않습니다 (Library, xampp 또는 Documents가 파일이 아닌 링크 인 경우에는 다른 수의 ..가 필요할 수 있습니다).
이 정보가 도움이 되나요?
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 $!;
이것은 모범 사례가 아닙니다. –
OK. 사실 나는 이것을 사용자 입력으로 전달하려고합니다. 그리고 내가 코드를 변경하지 않고 "/ Library/xampp/Documents/$ var"열린 파일을 사용하고 싶습니다. – user1247412
아. 그러면 Perl 코드를 변경할 수 없다면 할 수 없습니다. – Borodin
파일이 먼저 존재하고 다른 경로가 선택되어 있지 않은지 확인하십시오. 그런 다음 당신은 절대 경로 나 현재 작업 디렉토리 이외의 디렉토리에 상대적인 경로를 주어진 파일의 경로를 찾기 위해 노력하고 그 경로
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
/Library/xampp/Documents
에,하지만 난 그 일을 싫어 수 있습니다.
그렇습니다.'* CORE :: GLOBAL :: open = \ & some_sneaky_open_emulator'를 오버라이드 할 수 있기 때문에 가능 합니다만, 극단적 인 *에서는 제외하고,주의 깊게 임시화 된'local' guard를 사용하는 것이 좋습니다 오버라이드 – tchrist
사실 코드에서 취약점을 찾으려고합니다. 그래서 $ var에 값을 줄 수 있는지 테스트하고 싶습니다. 그 파일이/Library/xampp/Documents에 없으면 $ var에 입력으로 제공하는 다른 기존 파일을 열어야합니다. – user1247412
그 내용을 질문 본문에 추가하십시오. 그것은 오히려 중요한 부분입니다. – ysth