Windows의 상대적 경로에서 절대 경로 (파일 이름 포함)를 얻기 위해 어떤 Perl 모듈을 사용합니까?

StackOverflow https://stackoverflow.com/questions/1527638

문제

나는 내가 올바르게 찾고 있지 않다고 상상할 수있다. 이것은 여기서 질문을받는 명백한 질문처럼 보입니다. 이것이 복제 된 경우 사과드립니다.

나는 명령 줄 인수로 파일 이름을 취할 Perl 프로그램을 작성하고 있습니다. 파일 이름 (또는 상대 경로가 부착 된 파일 이름)을 절대 경로 (특히 Win32 :: Ole과 함께 작동하기 위해)로 변환해야합니다.

나는 사용을 시도했다 CWD's'abs_path '는 거의 내가 원하는 것을 수행하지만 Win32 대신 Unix 스타일 경로를 사용하여 반환합니다.

경로를 변환하는 모듈이 있습니까, 아니면 처음에는 더 나은 모듈을 사용할 수 있습니까?

도움이 되었습니까?

해결책

나는 사용한다 rel2abs ~에서 파일 :: 사양. 그래도 조심해야합니다. getdcwd ~에서 Cwd, 그리고 현재 드라이브에 대한 현재 작업 디렉토리를 원한다고 가정합니다. 파일이 다른 드라이브에있는 경우, 기본 경로를 설정하기 위해이를 직접 고정하거나 두 번째 인수를 제공해야합니다.

다른 팁

use File::Spec::Functions qw(rel2abs);
print rel2abs($ARGV[0]), "\n";
my($foo) = abs_path($some_file);
$foo =~ s{/}{\\}g;

print "FOO: $foo\n";

나는 cwd의 abs_path를 사용한 다음, regex를 사용하여 슬래시를 변환합니다. 진짜 완료해야합니다. 그러나 나는 대부분의 용도에서 유닉스 스타일 슬래시가 잘 작동한다는 것을 알았습니다. 슬래시를 변환 해야하는 경우 가끔 "성가신 제한된 프로그램에 파일 이름을 전달하는 것"을위한 것입니다.

use Cwd 'abs_path';
my $path = abs_path($rel_path);

# and only if necessary...
$path =~ s'[/\\]+'\\'g;  # use Windows-style slashes
$path =~ s'^\\'\\\\';    # handle network path

그러나 .. 나는 매핑 된 드라이브 참조의 유무에 관계없이 많은 네트워크 경로를 사용합니다. 귀하의 마일리지가 다를 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top