format
= format NAME ==
= picture line=
= value list=
= ...=
.
这个函数声明一个图形行的命名序列(以及相关值)用于 write 函数。如果省略了 NAME,名字缺省是 STDOUT,正好是 STDOUT 文件句柄的缺省格式名字。因此,和 sub 声明类似,这是一个编译时发生的包全局声明,并且值列表里的变量应该在格式定义时是可见的。也就是说,词法范围的变量必须在该文件的更早的位置定义,而动态范围的变量只需要在调用 write 的时候设置就可以了。下面是一个例子(它假设我们已经计算了 $cost 和 $quantity):
my $str = "widget"; # 词法范围的变量 format Nice_Output = Test: @<<<<<<<< @| | | | @>>>>> $str, $%, '$' . int($num) . local $~ = "Nice_Output"; # 选择输出格式。 local $num = $cost * $quantity; # 动态范围的变量。 write;
和文件句柄类似,格式名字是存在于一个符号表(包)里的标识符,而且是可以用包名修饰成全名的。在一个符号表的记录的类型团里,格式存放在它们自己的名字空间里,它和文件句柄,目录句柄,标量,散列和子过程是不同的。不过,和其他六种类型一样,一个叫做 Whatever 的格式也会被一个对 *Whatever 类型团的 local 所影响。换句话说,格式只是包含在类型团里的另外一种小东西,与其他小东西相互独立。
第七章,格式,里的“格式变量”节里包含大量它们的细节和它们的使用的例子。第二十八章描写了内部的格式相关变量,而 English 和 IO::Handle 模块提供了一个对他们简化的访问的接口。