Perl中的命名参数

ona*_*000 3 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__
Run Code Online (Sandbox Code Playgroud)

文件test.pl

use warnings;
use doh;
$trial = doh::;
$trial->new(name => "Tyson");
Run Code Online (Sandbox Code Playgroud)

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

fri*_*edo 9

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

首先,使用启动每个Perl文件

use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)

是的,你需要两者.

当调用在Perl的方法(而不是普通的子程序)上的左侧的东西->经营者(调用者)被压入参数列表的开始.所以你需要先从列表中删除它.对于构造函数方法,invocant通常是类名.对于实例方法,它将是对象本身.所以

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

    print "name is: $args{name}\n";
}
Run Code Online (Sandbox Code Playgroud)

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

例如,方法是将变量命名为$self.

还要注意我在子程序名后删除了parens; 这些对OO方法没有任何作用,无论如何它们可能不会按你的想法行事.