2012-11-22 3 views
2

간단한 작업 다이 (가 성공 또는 아니었다면), 스크립트가 사망펄 : QX 또는

qx(wget -P $destination $file) || die "i can't download file: $file!\n";

하지만 때마다 :

을 나는 줄 스크립트를 가지고있다.

어떻게 관용구 동작으로 변경해야합니까? (성공 - 라이브, 죽지 않음)

도움을 주셔서 감사합니다!

일부 에디션

: 나는 모든 로그를 알고 싶어요, 그래서 난 라인 등이 사용하는 것을 선호 :

print qx(...)||die"EXPLAIN";

답변

10

qxbackticks operator를 사용하는 것과 같습니다. 실행중인 프로그램의 출력을 반환하지만 STDOUT이 아닌 STDOUT 만 반환합니다. wget은 STDOUT에서 아무것도 출력하지 않는 것 같습니다 (STDERR에서 진행 상황을보고합니다). 따라서 결과는 Perl의 의미에서 거짓 인 빈 문자열입니다. die이 호출됩니다.

일반적으로 프로그램의 결과가 성공했는지 여부를 확인하기 위해 프로그램의 결과를 평가하지는 않지만 프로그램의 종료 상태를 확인합니다. 대부분의 Unix CLI 프로그램은 성공시 0을 반환하므로 이는 comparing $? to 0으로 수행 할 수 있습니다.

wget의 출력이 필요하지 않은 경우 qx 대신 system을 대신 사용하십시오. die "oh noes!" if 0 != system("wget ...")을 쓸 수 있도록 프로그램의 종료 코드를 직접 반환합니다.

+0

'wget -O-'는 다운로드 한 모든 파일을 표준 출력으로 리턴합니다. – choroba

+0

그는'-P $ destination'을 사용하기 때문에 wget이 STDOUT으로 출력되도록하는 것은 의심 스럽습니다. –