Perl中的命名参数

时间:2012-10-18 19:41:23

标签: perl parameter-passing

我正在尝试在Perl中使用命名参数。我一直在使用http://perldesignpatterns.com/?NamedArguments作为参考。

似乎有道理。但是,我似乎无法真正获得发送的值。

我已尝试更改为$args{'name'}$args{"name"},但没有运气。我似乎无法获得传入的值。我需要找出哪个方向来弄清楚究竟发生了什么?

档案doh.pm

package doh;
sub new ()
{
   my %args = @_;
   $name = $args{name};
   print $name;
}
1;
__END__

文件test.pl

use warnings;
use doh;
$trial = doh::;
$trial->new(name => "Tyson");

运行test.pl时不会输出任何输出。

1 个答案:

答案 0 :(得分:9)

我不确定你要对$trial = doh::;做什么,但你的主要问题是你在处理你的方法调用之前试图处理参数。

首先,使用

启动每个Perl文件
use strict;
use warnings;

是的,你需要两者。

在Perl中调用方法时(与普通子程序相反),->运算符左侧的东西( invocant )被推到参数的开头名单。所以你需要先从列表中删除它。对于构造函数方法,invocant通常是类名。对于实例方法,它将是对象本身。所以

sub new {
    my $class = shift;
    my %args = @_;

    print "name is: $args{name}\n";
}

(如果您不想使用shift,您也可以只写my ( $class, %args ) = @_;

对于实例方法,约定是将变量命名为$self

另请注意我在子程序名称后删除了parens;这些对OO方法没有任何作用,无论如何它们可能都没有你想的那样。