my %p = @_;
@_
предполагается, содержат пары ключ-значение, которые затем используются для построения хэш %p
.
my $arr = $p{name};
Предполагается, что список аргументов, чтобы содержали что-то вдоль линий name, [1, 2, 3,]
так что $p{name}
является ссылкой на массив.
my @a = @$arr;
Dereference, что ссылка на массив, чтобы получить массив @
.
Вот вызов, который может работать с этой прелюдии в sub
:
func(this => 'that', name => [1, 2, 3]);
Если вы хотите, чтобы свести всю прелюдию к одной инструкции, вы можете использовать:
my @a = @{ { @_ }->{name} };
, как в:
#!/usr/bin/env perl
use strict;
use warnings;
use YAML::XS;
func(this => 'that', name => [1, 2, 3]);
sub func {
my @a = @{ { @_ }->{name} };
print Dump \@a;
}
Выход:
---
- 1
- 2
- 3
Если массив, на который указывает name
велик, и если вы не нужна неполную копию, однако, это может быть лучше просто придерживаться ссылок:
my $aref = { @_ }->{ name };
'my% p = @_; my $ arr = $ p {name}; my @a = @ $ arr; ': P – simbabque
Большинство пропустит выполнение' my @a = @ $ arr; 'как ненужную трату времени. – ikegami