$obj->SUPER::promote();
$obj->SUPER->promote();
任何人都知道他们是否一样吗?
答案 0 :(得分:22)
没有。 - > 运算符表示调用引用(在本例中为对象引用),它将查找 SUPER 方法,而不是超级基类。
以下是显示它的代码:
#!/usr/bin/perl -w
package MyOBJ;
use strict;
use warnings;
use Data::Dumper;
sub new {
my ($class) = @_;
my $self = {};
bless $self, $class;
return $self;
}
sub promote {
my ($self) = @_;
print Dumper($self);
}
1;
package MyOBJ::Sub;
use strict;
use warnings;
use base 'MyOBJ';
1;
use strict;
use warnings;
my $obj = MyOBJ::Sub->new();
$obj->SUPER::promote();
运行它,你会得到:
$VAR1 = bless( {}, 'MyOBJ::Sub' );
当您更改最后一行以使用 - > 而不是 :: 时,您会得到:
Can't locate object method "SUPER" via package "MyOBJ" at test.pl line 45.
来自“perldoc perlop”手册
箭头操作员
如果右侧是“[...]”,“{...}”或“(...)”下标,则左侧必须是硬的或符号引用分别是数组,散列或子程序。
否则,右侧是方法名称或包含方法名称或子程序引用的简单标量变量,左侧必须是对象(有福的引用)或类名称(即,包名称)
由于左侧既不是对象引用也不是类名(SUPER是用于多态的语言定义的裸字),因此它被视为一种方法,它不存在,因此就是错误。