2012-10-15 41 views
1

我有一個測試文件看起來像這樣:掌握Perl子錯誤的結果

my $int = new Services::Plugins::FTP::ftp; 
$int->AddUser("durr"); 

該模塊有這樣的代碼:

sub AddUser { 

my(@username) = @_; 
print "@_\n"; 

} 

但我的結果是這樣的: 服務::插件:: FTP :: ftp = HASH(0x2490160)durr

我只想'durr'。

爲什麼我得到額外的東西?

回答

9

你正在處理面向對象的Perl。如果你在一個對象實例上調用一個函數,就像在你的情況下使用$instance->function()那樣,那麼第一個參數就是對實例本身的引用。它通常被稱爲$self

常用的成語是寫實例方法是這樣的:

sub some_method { 
    my ($self, @args) = @_; 
} 

我建議你在perlootut man page(一個很好的教程)Perl的面向對象的系統上閱讀了。

5

的第一個參數是$foo->bar()$foo

sub AddUser { 
    my($self, @username) = @_; 
    print "@_\n"; 
} 
3

您正在使用面向對象的方法($int->AddUser("durr")方法調用)。在調用方法時,第一個參數始終是方法應該應用到的對象或類。