Perl,如何打印包名?

26

在 Perl 中,是否可以访问当前包的名称(例如,在自定义错误报告中打印它)?

2个回答

35

来自perldoc perlmod:

The special symbol __PACKAGE__ contains the current package,
but cannot (easily) be used to construct variable names.

为什么它不能(容易地)用于构造变量名? - MarcoS
你需要像这样的代码 my $var = __PACKAGE__ .'::MySubClass'; 来获取变量,它没有标记并且不会被插值。在更复杂的情况下,这可能会变得棘手。 (与 my $var = "${pkg}::MySubClass"; 相比较) - plusplus

11

__PACKAGE__ 可以得到代码编译时所在的包。

或者,你可以使用 caller。它可以获取调用当前子程序的代码所在的包。

package Report;

sub gen_report {
   my $report = "This report is generated for ".caller().".\n";  # MyModule
   ...
}

package MyModule;

Report::gen_report();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接