Perl 格式化输出

Perl教程 2025-08-01

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 codercto taobao"; formatSTDOUT= first: ^ # 左边对齐,字符长度为6 $text second: ^ # 左边对齐,字符长度为6 $text third: ^ # 左边对齐,字符长度为5,taobao 最后一个 o 被截断 $text . write

执行以上实例输出结果为:

first: google
second: codercto
third: taoba

格式行(图形行)语法

  • 格式行以 @ 或者 ^ 开头,这些行不作任何形式的变量代换。
  • @ 字段(不要同数组符号 @ 相混淆)是普通的字段。
  • @,^ 后的 , ,| 长度决定了字段的长度,如果变量超出定义的长度,那么它将被截断。
  • , ,| 还分别表示,左对齐,右对齐,居中对齐。
  • ^ 字段用于多行文本块填充。

值域格式

值域的格式,如下表所示:

格式 值域含义
@ 左对齐输出
@ 右对齐输出
@||| 中对齐输出
@##.##   固定精度数字  
@* 多行文本

每个值域的第一个字符是行填充符,当使用@字符时,不做文本格式化。

在上表中,除了多行值域@*,域宽都等于其指定的包含字符@在内的字符个数,例如:

@###.##

表示七个字符宽,小数点前四个,小数点后两个。

实例如下:

实例

#!/usr/bin/perl formatEMPLOYEE= =================================== @ @ $name, $age @#####.## $salary =================================== . select(STDOUT); $~ = EMPLOYEE; @n= ("Ali", "Codercto", "Jaffer"); @a = (20,30, 40); @s= (2000.00, 2500.00, 4000.000); $i= 0; foreach(@n){ $name= $_; $age= $a[$i]; $salary= $s[$i++]; write; }