file :: basename :: dirname 인수가 절대 경로 이름 인 경우 항상 상위 또는 루트 디렉토리를 반환합니까?
문제
이 서브 루틴이 루트 디렉토리가 아닌 유효한 경로로 호출되는 상황이 있습니다. - 상위 디렉토리를 반환하지 않습니까?
use Cwd qw( realpath );
use File::Basename qw( dirname );
sub parent_dir {
my $dir = realpath shift;
return dirname $dir;
}
. 해결책
File::Basename
이 함수는 UNIX 쉘과의 호환성을 위해 제공됩니다. Command
dirname
를 사용하여 일부 단점 중 일부를 상속했습니다.에도 불구하고 그 이름은 not 항상 디렉토리 이름을 당신과 같이 반환합니다. 기대할 수 있습니다.POTH의 디렉토리 이름을 사용하려면 안전해야합니다.dirname(1)
.
이를 분명히하는 몇 가지 예가 표시됩니다.
+----------------+-----------+---------------+
| Test Path | dirname() | fileparse() |
+----------------+-----------+---------------+
| /foo/bar/baz | /foo/bar | /foo/bar/ | # dirname() works as expected
+----------------+-----------+---------------+
| /foo/bar/baz/ | /foo/bar | /foo/bar/baz/ | # Should have included baz here
+----------------+-----------+---------------+
| foo/ | . | foo/ | # fileparse() wins again
+----------------+-----------+---------------+
.
간단한 디렉토리 및 FilePaths (후행 슬래시가없는)의 절대 경로가 제공되면 경로는 첫 번째 테스트와 유사합니다. 즉, 상위 디렉터리가 항상 반환됩니다.
제휴하지 않습니다 StackOverflow