변경사항 (가장 최근의 "일반적인 수정"부터)
(다른 변경사항 없음)
-34,6 +34,9 |
|
실행에 실패하면 $!변수에 에러 메시지가 담김. |
== # 기타 & comments == |
|
* [http://advent.perl.kr/2013/2013-12-12.html 열두번째 날: 펄에서 외부명령어 실행 시키기 | R.I.P. @am0c - Seoul.pm 펄 크리스마스 달력 #2013] |
|
<div class="comments"> |
<longcomments(100)> |
---- |
Perl에서 다른 프로그램 실행하기
1. pipe
pipe를 통한 입출력
open (OUT, "|more") or *OUT = *STDOUT;
open (IN, "lynx|") or die "Couldn't start lynx";
파이프를 쓴 후에는 반드시 close를 해 주자.
open을 인자 3개 형식으로 사용할 경우는 출력은 "|-", 입력은 "-|"로 표기.
2. system
프로그램을 실행시키고, 종료할 때까지 대기.
쉘을 거쳐서 프로그램을 실행하는가, perl이 직접 실행하는가의 차이에 주의
- system("dir $files"); - 쉘을 띄움.
- 데이타가 외부에서 들어오는 경우 위험. $files의 값이 "; rm -rf /"로 들어가는 경우 등.
- system ( $program, @arguments ); 형태로 호출하면 perl이 직접 $program을 실행시킴
- 이런 이유로, 첫번째 형태더라도, 스트링에 special shell character(*, ?, |, <, &, >)가 포함되어 있지 않은 경우에는 두번째 형태로 변환하여 perl이 직접 실행한다.
실행된 프로그램의 종료코드값은 $?의 값을 128로 나누면 된다...라고 Beginning perl에 나와 있으나, perldoc -f system의 말과 테스트에 의하면 256으로 나눠야 한다. $?에 대해서는 /에러처리 참조.
더 자세한 내용은 /System 참고
3. backtick, qx()
실행된 프로그램의 표준출력을 리턴한다.
- 리스트 문맥 - 출력의 각 라인을 원소로 하는 리스트 반환
- 스칼라 문맥 - 출력 전체
실행에 실패하면 $!변수에 에러 메시지가 담김.
4. 기타 & comments
컴퓨터분류