가 dirname($0)
이 Chankey Pathak 및 Matthias 가 보여으로, 전체 경로를 반환하지 않습니다 그러나 scrip.pl이 경로에서 발견되면 아무런 차이가 없다.
다른 방법이 있다는 것을 추가하고 싶습니다. 예를 들어,
use FindBin qw($RealBin);
BEGIN: {
my ($scriptDir) = $RealBin;
chdir $scriptDir or die "Can't change to $scriptDir: $!";
};
$RealBin
는 해결 링크의 전체 경로입니다 것을 제외하고, 당신이 보여주는 것과 같은 제공
FindBin (또한 코어)를 사용할 수 있습니다.
chdir은 설명에 대해 ikegami으로 인해 실패 할 수 있습니다. 이 경우 false가 반환되고 위의 코드가 적합하면 적절하게 조정됩니다. 질문 된 세 번째 줄은 이것과 아무런 관련이 없음을 주목하십시오.
이 모듈은 또한 일반적으로 아마 모두 사용하는 경우에도 쉽게 결정을 만드는 것, 예
use lib "$RealBin/../lib";
를 들어, lib 프라 그마와 함께 도서관에 상대 경로에 사용됩니다. 이 함수는, UNIX 쉘 명령 dirname(1)
과의 호환성을 위해 제공되며, 그 단점들을 계승
( 광산하지 강조 ) File::Basename에서 dirname
설명하면 다음과 같다
더욱.그 이름에도 불구하고 NOT 항상 예상대로 디렉토리 이름을 반환합니다. 안전을 기하기 위해 경로의 디렉토리 이름을 원하면 fileparse()
을 사용하십시오.
내가 아니라도 abs_path
전체 경로를 제공하지 않을 수 자체 __FILE__
부터 사용되어
use Cwd qw(abs_path);
BEGIN: {
my ($scriptDir) = abs_path(__FILE__) =~ m|(.*)/|;
chdir $scriptDir
or die "Can't change to $scriptDir: $!";
};
와 함께 갈 것입니다. 정규식은 모든 것을 마지막으로 /
까지, 즉 스크립트 디렉토리의 전체 경로까지 훑어 봅니다.
아래와 같이, FindBin qw ($ RealBin);을 사용하고 디렉토리를 변경하지 마십시오. '@ ARGV '에 나열된 파일은'$ RealBin'이 아니라'pwd'에 상대적입니다. – shawnhcorey