使用Perl子例程获得错误的结果

时间:2012-10-15 16:19:02

标签: perl

我有一个如下所示的测试文件:

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

该模块有以下代码:

sub AddUser {

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

}

但我的结果如下:     服务::插件:: FTP :: FTP = HASH(0x2490160)杜尔

我只想要'durr'。

为什么我会得到额外的东西?

3 个答案:

答案 0 :(得分:9)

你正在处理面向对象的Perl。如果在对象实例上调用函数(如$instance->function()的情况),则第一个参数是对实例本身的引用。它通常被称为$self

常用的习惯用法是编写如下的实例方法:

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

我建议你阅读perlootut man page中的Perl面向对象系统(一个很好的教程)。

答案 1 :(得分:5)

$foo->bar()的第一个参数是$foo

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

答案 2 :(得分:3)

您正在使用面向对象的方法($int->AddUser("durr")方法调用)。调用方法时,第一个参数始终是应该应用方法的对象或类。