Perl 형식의 출력
Perl은 매우 강력한 텍스트 데이터 처리 언어입니다.
Perl에서는 format을 사용하여 템플릿을 정의한 다음 write를 사용하여 지정된 템플릿에 따라 데이터를 출력할 수 있습니다.
Perl 형식 정의 구문은 다음과 같습니다.
format FormatName = fieldline value_one, value_two, value_three fieldline value_one, value_two .
매개변수 분석:
FormatName: 형식 이름입니다.
fieldline: @,^,<,>,|와 같은 문자를 사용하여 출력 줄의 형식을 정의하는 데 사용되는 형식 줄입니다.
value_one, value_two...: 이전 형식 행에 값을 삽입하는 데 사용되는 데이터 행, 모두 Perl 변수입니다.
.: 끝 기호.
다음은 간단한 형식 지정 예입니다.
#!/usr/bin/perl $text = "google php taobao"; format STDOUT = first: ^<<<<< # 左边对齐,字符长度为6 $text second: ^<<<<< # 左边对齐,字符长度为6 $text third: ^<<<< # 左边对齐,字符长度为5,taobao 最后一个 o 被截断 $text . write
위 예를 실행한 결과는 다음과 같습니다.
first: google second: php third: taoba
행 형식 지정(그래픽 선) 구문
형식 행은 @ 또는 ^로 시작하며, 이러한 행은 어떤 형태의 변수 대체도 수행하지 않습니다.
@ 필드(배열 기호 @와 혼동하지 마세요)는 일반 필드입니다.
@,^ <, >,|의 길이에 따라 변수가 정의된 길이를 초과하면 잘립니다.
<, >,|는 각각 왼쪽 정렬, 오른쪽 정렬, 가운데 정렬을 나타냅니다.
^ 필드는 여러 줄의 텍스트 블록을 채우는 데 사용됩니다.
값 필드 형식
값 필드 형식은 다음 표와 같습니다.
格式 | 值域含义 |
---|---|
@<<< | 左对齐输出 |
@>>> | 右对齐输出 |
@||| | 中对齐输出 |
@##.## | 固定精度数字 |
@* | 多行文本 |
각 값 필드의 첫 번째 문자는 줄 채우기 문자입니다. @ 문자를 사용하면 텍스트 서식이 적용되지 않습니다.
위 표에서 여러 줄 값 필드 @*를 제외하고 필드 너비는 @ 문자를 포함하여 지정된 문자 수와 같습니다. 예:
@###.##
는 7을 의미합니다. 문자 폭, 앞에 소수점 4자리, 뒤에 소수점 2자리.
예제는 다음과 같습니다.
#!/usr/bin/perl format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== . select(STDOUT); $~ = EMPLOYEE; @n = ("Ali", "php", "Jaffer"); @a = (20,30, 40); @s = (2000.00, 2500.00, 4000.000); $i = 0; foreach (@n){ $name = $_; $age = $a[$i]; $salary = $s[$i++]; write; }
위 예의 출력 결과는 다음과 같습니다.
=================================== Ali 20 2000.00 =================================== =================================== php 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
형식 변수
$~ ($ FORMAT_NAME): 형식 이름 $^ ($FORMAT_TOP_NAME): 현재 헤더 형식 이름이
$%에 저장됩니다. ($FORMAT_PAGE_NUMBER): 현재 출력 페이지 번호
$= ($FORMAT_LINES_PER_PAGE): 각 페이지의 줄 수
$| ($FORMAT_AUTOFLUSH): 출력 버퍼 저장소를 자동으로 새로 고칠지 여부
-
$^L ($FORMAT_FORMFEED) : 각 페이지(첫 번째 페이지 제외)의 헤더가
에 저장되기 전에 출력해야 하는 문자열은 다음과 같습니다. $~ 사용 방법 형식 지정 예:
#!/usr/bin/perl $~ = "MYFORMAT"; # 指定缺省文件变量下所使用的格式 write; # 输出 $~ 所指定的格式 format MYFORMAT = # 定义格式 MYFORMAT ================================= Text # php中文网 ================================= . write;
위 예제를 실행한 결과는 다음과 같습니다.
================================= Text # php中文网 ================================= ================================= Text # php中文网 =================================
$~를 지정하지 않으면 STDOUT이라는 형식이 출력됩니다.
#!/usr/bin/perl write; # 不指定$~的情况下会寻找名为STDOUT的格式 format STDOUT = ~用~号指定的文字不会被输出 ---------------- STDOUT格式 ---------------- .
위 예제를 실행한 결과는 다음과 같습니다.
---------------- STDOUT格式 ----------------
다음 예제에서는 보고서 헤더 정보를 추가하여 $^ 또는 $FORMAT_TOP_NAME 변수를 사용하는 방법을 보여줍니다.
#!/usr/bin/perl format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== . format EMPLOYEE_TOP = =================================== Name Age =================================== . select(STDOUT); $~ = EMPLOYEE; $^ = EMPLOYEE_TOP; @n = ("Ali", "php", "Jaffer"); @a = (20,30, 40); @s = (2000.00, 2500.00, 4000.000); $i = 0; foreach (@n){ $name = $_; $age = $a[$i]; $salary = $s[$i++]; write; }
위 예의 출력 결과는 다음과 같습니다.
=================================== Name Age =================================== =================================== Ali 20 2000.00 =================================== =================================== php 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
$% 또는 $FORMAT_PAGE_NUMBER를 사용하여 보고서의 페이징을 설정할 수도 있습니다.
#!/usr/bin/perl format EMPLOYEE = =================================== @<<<<<<<<<<<<<<<<<<<<<< @<< $name $age @#####.## $salary =================================== . # 添加分页 $% format EMPLOYEE_TOP = =================================== Name Age Page @< $% =================================== . select(STDOUT); $~ = EMPLOYEE; $^ = EMPLOYEE_TOP; @n = ("Ali", "php", "Jaffer"); @a = (20,30, 40); @s = (2000.00, 2500.00, 4000.000); $i = 0; foreach (@n){ $name = $_; $age = $a[$i]; $salary = $s[$i++]; write; }
위 예의 출력 결과는 다음과 같습니다.
=================================== Name Age Page 1 =================================== =================================== Ali 20 2000.00 =================================== =================================== php 30 2500.00 =================================== =================================== Jaffer 40 4000.00 ===================================
다른 파일로 출력
기본적으로 쓰기 기능은 결과를 표준 출력 파일 STDOUT으로 출력하도록 할 수도 있습니다. 가장 간단한 방법은 파일 변수를 쓰기 매개변수로 전달하는 것입니다.
write(MYFILE);
위의 코드는 MYFILE이라는 기본 인쇄 형식을 사용하여 MYFILE 파일에 출력을 씁니다.
그러나 이 방법으로는 $~ 변수를 사용하여 사용된 인쇄 형식을 변경할 수 없습니다. 시스템 변수 $~는 기본 파일 변수에만 영향을 미칩니다. 기본 파일 변수를 변경하고 $~를 변경한 다음 쓰기를 호출할 수 있습니다.
#!/usr/bin/perl if (open(MYFILE, ">tmp")) { $~ = "MYFORMAT"; write MYFILE; # 含文件变量的输出,此时会打印与变量同名的格式,即MYFILE。$~里指定的值被忽略。 format MYFILE = # 与文件变量同名 ================================= 输入到文件中 ================================= . close MYFILE; }
성공적으로 실행되면 아래와 같이 tmp 파일의 내용을 볼 수 있습니다.
$ cat tmp ================================= 输入到文件中 =================================
select를 사용하여 기본 파일 변수를 변경할 수 있으면 tmp 파일의 내부 표현이 반환됩니다. 현재 기본 파일 변수, 이런 방식으로 우리는 프로그램의 다른 부분에 영향을 주지 않고 우리 자신의 아이디어에 따라 서브루틴을 생성하고 출력할 수 있습니다.
#!/usr/bin/perl if (open(MYFILE, ">>tmp")) { select (MYFILE); # 使得默认文件变量的打印输出到MYFILE中 $~ = "OTHER"; write; # 默认文件变量,打印到select指定的文件中,必使用$~指定的格式 OTHER format OTHER = ================================= 使用定义的格式输入到文件中 ================================= . close MYFILE; }
성공적으로 실행되면 아래와 같이 tmp 파일의 내용을 볼 수 있습니다.
$ cat tmp ================================= 输入到文件中 ================================= ================================= 使用定义的格式输入到文件中 =================================