11. Format
포맷이란 ?
펄은 리포트 언어다? 리포트 언어라고 불리는 이유에 대해서 배운다.
포맷의 사용은 구성
- 포맷 정의하기
- 출력되어질 데이터를 포맷의 가변부(필드)로 로드하기
- 포맷 호출하기
포맷 정의하기
format 선언을 통해서 정의됨. format 선언은 서브루틴과 마찬가지로 프로그램 텍스트의 임의의 장소에 존재 할 수 있다.
format 정의 모양
format someformatname =
fieldline
value_one,value_two,value_three
fieldline
value_one,value_two
fieldline
value_one,value_two,value_three
.
**포맷이름은 파일핸들 이름과 동일하다.
첫번째 행 다음은 0 혹은 그 이상은 텍스트 행으로 구성됨 템플릿이 온다.(템플릿은 여백에 민감하다.)
예)
Hello, my name is @<<<<<<<<<<< :: @<<<<<<<<<<< 는 필드 홀더라고 부른다. 11 문자이면 왼쪽 맞춤 정렬이다.
$name
** 값 행 내의 여백은 무시된다.
실제 포맷 정의
format ADDRESSLABEL =
=============================
| @<<<<<<<<<<<<<<<<<<<<<< |
$name
| @<<<<<<<<<<<<<<<<<<<<<< |
$address
| @<<<<<<<<<<<<, @< @<<<< |
$city,$state,$zip
============================
.
포맷의 호출
포맷은 write 함수로 호출됨.
이 함수는 파일핸들의 이름을 받아서 그 파일 핸들에 대한 현재 포맷을 사용하여 파일 핸들에 대한 텍스트를 생성한다. 디폴트로 파일핸들에 대한 현재 포맷은 동일한 이름의 포맷(STDOUT)
** 파일핸들 이름은 포맷의 이름과 동일함을 주목하라.
open (ADDRESSLABEL,">labels-to-print") || die "can't create";
open (ADDRESSES,"addresses") || die "cannot open addresses";
while (<ADDRESSES>){
chomp;
($name,$address,$city,$state,$zip) = split(/:/);
write (ADDRESSLABEL); #출력을 보냄
}
필드홀더에 대한 상세
필드홀더는 @으로 시작한다.
<<<<< :: 왼쪽 맞춤
>>>>> :: 오른쪽 맞춤
||||| :: 중앙 맞춤
산술필드
@로 시작 하나 이상의 # 과 마침표(optional)
복수행 필드
일반적으로 값의 첫번째 뉴라인에서 멈춘다.
@*
충전필드 (filled field) : 채우는 역할을 수행 한다.
@ 대신 ^ (캐럿)을 대신 사용함.
~ : 억제 지시자 , 임의의 행은 그것이 빈행으로 출력되지 않도록 한다.
~~ : 임의행에 대해서 처리 한다. 즉 4개행이 넘어도 가능
예) 여기서 원래 PEOPLE을 STDOUT으로 일부려 변경 했음.
format STDOUT =
Name: @<<<<<<<<<<<< Comment: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<
$name, $comment
~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<
$comment
~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<
$comment
~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<
$comment
.
무한행이 되어도 만족한다.
format STDOUT =
Name: @<<<<<<<<<<<< Comment: ^<<<<<<<<<<<<<<<<<<<<<<<<<<<
$name, $comment
~~ ^<<<<<<<<<<<<<<<<<<<<<<<<<<<
$comment
.
Top-of-Page 포맷
포맷이름에 _TOP 이 붙은 파일 핸드 이름이다.
디폴트 페이지 길이는 60행
포맷에 대한 디폴트 변경
select()를 이용한 파일 핸들 바꾸기
- STDOUT print에 대해 디폴트이기 때문이다.
select 연산은 점착성이 있음. 다른것을 선택하기 전까지는 지속성이 있다.
select 함수의 리턴값은 이전에 선택된 핸들의 이름이다.
예)
$oldhandle = select (LOGFILE);
print “this goes to LOGFILE\n”;
select ($oldhandle);
포맷이름 바꾸기
특정 파일핸들에 대한 디폴트 포맷이름은 파일핸들과 동일하다.
$~ :: 특별 변수 현재 선택된 파일핸들
Top-of-page 포맷이름 바꾸기
$^ :: top-of-page 포맷을 바꿀 수 있다.
$= :: 페이지 길이 변경
$- :: 페이지 위치 변경
댓글 없음:
댓글 쓰기