2011-06-25 119 views

回答

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. 

從t他 「的perldoc perlop得到」 手冊

箭頭操作符

如果右側或者是 「[...]」, 「{...}」,或「(...) 「下標,那麼左側必須是分別對數組,哈希或子例程的硬引用或符號引用。

否則,右側是一個方法名稱或一個包含方法名稱或子例程引用的簡單標量變量,左側必須是對象(有福的引用)或類名(也就是說,一個包名稱)

由於左側既不是對象ref也不是類名(SUPER是多義性定義的裸語),所以它被視爲一個不存在的方法,因此是錯誤。

+0

爲什麼在使用' - >'時會查找方法,原因是什麼? –

+0

我附加了一些更多的信息給我的答案,從perl手冊複製。希望進一步爲你解釋。 –

相關問題