你应该知道的Perl令牌

Perl有许多全局变量,其中一些以特殊字面量格式存储,如:__NAME__。了解这些特殊字面量(又称令牌)是很有用的,因为它们在Perl代码中经常出现,并提供了有用的功能。

PACKAGE

此令牌包含包的名称,该名称在Perl模块的顶部声明,例如

package Perltricks::Example;
use strict;
use warnings;

sub print_package_name {
    print __PACKAGE__ . "\n";
}

在此示例中,子程序‘print_package_name’将打印‘Perltricks::Example’。__PACKAGE__是最有用(也是使用最频繁的)令牌之一,因为它在代码生成和类继承中有应用,程序员在事先不知道包名的情况下。在Perl程序(.pl文件)中,__PACKAGE__返回‘main’。

LINE, FILE

__LINE__令牌返回当前行号。__FILE__提供文件名。与__PACKAGE__类似,这些令牌可以与字符串和数值函数一起使用(如print)。

END, DATA

__END__定义了文件中Perl代码的结束。任何出现在__END__之后的内容都将被Perl编译器忽略。Perl程序员经常在__END__令牌之后放置模块文档。尽管POD标记语言被Perl编译器忽略,但使用__END__可以确保即使POD标记包含语法错误,Perl编译器也不会扫描该文件的部分。一个清晰的例子可以在LWP源代码中看到。

__DATA__与__END__类似,因为它在文件中定义了Perl代码的结束。然而,从__DATA__之后的行开始,直到文件末尾的任何文本都将被读取到文件句柄PACKAGENAME::DATA中(其中包名是__DATA__出现的包名)。SelfLoader文档详细讨论了__DATA__和__END__。

SUB

__SUB__返回当前子程序的引用。它可以通过‘use feature’指令在Perl 5.16及更高版本中使用。

*本文于2013年5月15日更新,包括有关__SUB__的信息的更正。感谢Jochen Hayek的更正。


本文最初发布在PerlTricks.com

标签

David Farrell

David是一位专业程序员,他经常推文博客关于代码和编程艺术。

浏览他们的文章

反馈

本文有问题?请在GitHub上打开问题或拉取请求以帮助我们。