다음은 UNIX
cat 명령과 거의 동일한 펄 프로그램이다.
#!/usr/local/bin/perl
#
# 암호파일을 읽고, 이것을 출력한 후, 다시 닫는다.
$file = '/etc/passwd'; # 파일명
open(INFO, $file); # 파일 열기
@lines = <INFO> # 읽어서 배열로 저장
close(INFO); # 파일 닫기
print @lines; # 배열출력
open 함수는 입력 파일을 연다(예: 읽기). 첫번째 매개변수는 앞으로 펄이 파일을 참조할 때 사용하는
filehandle이다. 두번째 매개변수는 파일명을 표시하는 표현식이다. 파일명이 인용되면 쉘확장없이 문자적으로 취해진다. 따라서 표현식 '~/notes/todolist'는 성공적으로 해석되지 못한다. 강제로 쉘 확장을 하려면 소괄호를 사용한다. 즉, 를 사용하면 된다.
close 함수는 파일에대한 동작을 종료하도록 펄에 지시한다.
파일핸들에대한 논의에 추가해야 하는 몇몇 유용한 것들이 있다. 먼저
open문은 입력뿐만아니라 출력 파일, 추가용 파일을 지정할 수 있다. 출력 하기위해서는 파일명 앞에
>를 붙이며, 덧붙이기위해서는
>>를 붙인다:
open(INFO, $file); # 입력으로 열기
open(INFO, ">$file"); # 출력으로 열기
open(INFO, ">>$file"); # 추가로 열기
open(INFO, "-'); # 표준출력 열기
위의 프로그램에서 정보는 파일로부터 읽혀진다. 파일은 INFO 파일이며, 이것으로 부터 읽기위해 펄은 소괄호를 사용한다. 따라서
@lines = ;
은 파일핸들에의해 지시된 파일을 배열 @lines로 읽어들인다. 라는 표현식은 한번에 파일 전체를 읽게된다. 이 것은 배열 환경에서 읽기가 취해졌기 때문이다. @lines를 스칼라 $lines로 대치하면 한 행만 읽혀진다. 어떠한 경우이든 각 행은 개행문자로 끝난다.
연습
각행의 선두에 # 기호를 출력하도록 위의 프로그램을 변경한다. 한행만 변경해야하며,
$" 변수를 사용한다. 예기치 않은 일들이 파일을 처리하는 중에 발생할 수 있으므로
펄 프로그램 실행 절에서 언급한
-w을 사용한다.