Этот фрагмент создает анонимный хэш Perl? - PullRequest
0 голосов
/ 29 ноября 2009

Читая фрагменты, предоставленные FormFiller (откуда я случайно попал), я заметил эту строку:

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

Это password => Interactive => [] эквивалентно {"password" => {"Interactive"=>[]}}? Если нет, то чем он станет?

Ответы [ 3 ]

7 голосов
/ 29 ноября 2009

=> семантически (почти) идентичен , (см. «Оператор запятой» в perldoc perlop ), поэтому вы делаете это:

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

Если этот стиль вызова поддерживается методом (чего нет) , то он сам должен будет преобразовать эти аргументы в

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

Однако, как правило, аргументы в стиле хеш-функции должны передаваться как допустимый хеш-код:

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

Это будет получено функцией, подобной этой:

sub add_filler
{
    my $this = shift;
    my %configs = @_;
    # ...
}
5 голосов
/ 29 ноября 2009

Модуль 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 получает плоский список из трех аргументов: две строки и ссылку на анонимный массив.

5 голосов
/ 29 ноября 2009

Нет, это точно так же, как

$f->add_filler( "password", "Interactive", []);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...