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
컴퓨터분류