这段代码是否创建了匿名的Perl哈希?

时间:2009-11-28 21:24:21

标签: perl hash

在阅读FormFiller(我偶然得到的)提供的片段时,我注意到这一行:

$f->add_filler( password => Interactive => []);

password => Interactive => []是否等同于{"password" => {"Interactive"=>[]}}?如果没有,它会变成什么?

3 个答案:

答案 0 :(得分:7)

=>在语义上(几乎)与,完全相同(请参阅perldoc perlop处的“逗号运算符”),所以你这样做:

$f->add_filler( 'password', 'Interactive', [] );

如果方法(它没有)支持这种调用样式,那么它本身就必须将这些参数转换为

{ password => { Interactive => [] } }

然而更典型的是,哈希样式的参数将作为合法哈希传递开始:

$f->add_filler( password => { Interactive => 1 } );

这将由以下函数接收:

sub add_filler
{
    my $this = shift;
    my %configs = @_;
    # ...
}

答案 1 :(得分:5)

不,它与

完全相同
$f->add_filler( "password", "Interactive", []);

答案 2 :(得分:5)

Data::Dumper模块非常适合回答这样的问题。使用以下模拟:

package Foo;
use Data::Dumper;
sub new { bless {} => shift }
sub add_filler {
  my $self = shift;
  print Dumper \@_;
}

然后叫它

package main;
my $f = Foo->new;
$f->add_filler( password => Interactive => []);

看看你什么时候:

$VAR1 = [
          'password',
          'Interactive',
          []
        ];

这表明add_filler收到一个包含三个参数的平面列表:两个字符串和一个匿名数组的引用。