2014-01-12 6 views
0

이것은 작동하지 않는 아주 간단한 코드입니다. 어떤 이유로 든 알아 내지 못합니다.펄의 복사 명령의 절대 경로가 잘못 되었습니까?

#!/usr/bin/perl 
use File::Copy; 

$old = "car_lexusisf_gray_30inclination_000azimuth.png"; 
$new = "C:\Users\Lenovo\Documents\mycomp\simulation\cars\zzzorganizedbyviews\00inclination_000azimuth\lexuscopy.png"; 

copy ($old, $new) or die "File cannot be copied."; 

파일을 복사 할 수 없다는 오류가 발생합니다.

$ new 값을 경로없이 간단하게 설정하면 복사 명령에 아무런 문제가 없음을 알고 있습니다. 그러나 위의 내용을 썼을 때 경로를 표현할 때 잘못된 점은 무엇입니까? Windows 탐색기의 주소 표시 줄에 복사 한 후 지나면 해당 폴더에 정상적으로 도달합니다.

+2

예를 들어 'C : \\ car ...'와 같이 백 슬래시를 백 슬래시로 묶어야합니다. – suspectus

+2

또는 슬래시를 사용하십시오. 일반적으로 가장 간단한 솔루션입니다. –

답변

7

팁 : 복사를 수행하기 전에 경로를 인쇄하십시오. 다음과 같이 표시됩니다.

C:SERSenovodocumentsmycompsimulationrszzzorganizedbyviewsinclination_000azimuthexuscopy.png 

원하지 않는 내용입니다. 백 슬래시는 Perl에서 이스케이프 처리해야하는 이스케이프 문자입니다. 백 슬래시 시퀀스가 ​​유효한 이스케이프를 형성하지 않으면 자동으로 무시됩니다. 대신 슬래시

"C:\\Users\\Lenovo\\Documents\\mycomp\\simulation\\cars\\zzzorganizedbyviews\\00inclination_000azimuth\\lexuscopy.png"; 

하거나 앞으로 사용 - 대부분의 경우, 유닉스 스타일의 경로도 Windows에서 잘 작동 :처럼 탈출 백 슬래시와 함께, 귀하의 문자열이 보일 것이다. 여기

실수로 사용되는 이스케이프의 목록입니다

  • \U 나머지
  • \L 나머지
  • \ca가 제어 문자 (ASCII 1, 호의 시작)입니다 lowercases uppercases
  • \00은 8 진수입니다. 여기서 NUL 바이트
  • \l은 다음 문자를 소문자로합니다.
3

보간을 의도하지 않으면 큰 따옴표 대신 작은 따옴표를 사용하십시오.

+0

보간법이란 무엇입니까? – user961627

+0

@ user961627 - [보간법] (http://perlmeme.org/howtos/using_perl/interpolation.html) – Kenosis

관련 문제