在阅读所提供的片段FormFiller(这里我有点意外了),我注意到这条线:
$f->add_filler( password => Interactive => []);
Run Code Online (Sandbox Code Playgroud)
这password => Interactive => []相当于{"password" => {"Interactive"=>[]}}?如果没有,它会变成什么?
=>在语义上(几乎)相同,(参见perldoc perlop的 "逗号运算符" ),所以你这样做:
$f->add_filler( 'password', 'Interactive', [] );
Run Code Online (Sandbox Code Playgroud)
如果该方法支持此调用样式(它不支持),则它本身必须将这些参数转换为
{ password => { Interactive => [] } }
Run Code Online (Sandbox Code Playgroud)
但更典型的是,哈希样式的参数将作为合法哈希传递,以开头:
$f->add_filler( password => { Interactive => 1 } );
Run Code Online (Sandbox Code Playgroud)
这将由这样的函数接收:
sub add_filler
{
my $this = shift;
my %configs = @_;
# ...
}
Run Code Online (Sandbox Code Playgroud)
该Data::Dumper模块非常适合回答这样的问题.使用以下mock:
package Foo;
use Data::Dumper;
sub new { bless {} => shift }
sub add_filler {
my $self = shift;
print Dumper \@_;
}
Run Code Online (Sandbox Code Playgroud)
然后打电话给它
package main;
my $f = Foo->new;
$f->add_filler( password => Interactive => []);
Run Code Online (Sandbox Code Playgroud)
看看你什么时候得到:
$VAR1 = [
'password',
'Interactive',
[]
];
Run Code Online (Sandbox Code Playgroud)
这表明add_filler接收到三个参数的平面列表:两个字符串和对匿名数组的引用.