如果在我的代码中,我会有如下调用:
__PACKAGE__->method;
Run Code Online (Sandbox Code Playgroud)
如果继承此模块,这会限制此模块的可用性吗?
这取决于你想做什么:
#!/usr/bin/perl
package A;
use strict; use warnings;
sub new { bless {} => $_[0] }
sub method1 {
printf "Hello from: %s\n", __PACKAGE__;
}
sub method2 {
my $self = shift;
printf "Hello from: %s\n", ref($self);
}
package B;
use strict; use warnings;
use parent 'A';
package main;
my $b = B->new;
$b->method1;
$b->method2;
Run Code Online (Sandbox Code Playgroud)
输出:
Hello from: A Hello from: B
如果您打算继承该方法,请在指示对象上调用它,并且不要依赖于您找到它的包.如果您打算调用包内部的方法,而其他包不应该看到,那么它可能会好好地.在Intermediate Perl中有一个更全面的解释,可能在perlboot中(这是本书的摘录).
一般来说,__PACKAGE__除非我正在写一个modulino,否则我尽量不要使用.
你为什么要用__PACKAGE__?