Я передаю следующий хеш подпрограмме
$VAR1 = {
'password' => 'abc123',
'IP' => '172.18.18.122',
'port' => '8080',
'username' => 'sensor1'
};
И я получаю эти результаты, когда использую пользовательский дампер с переменной @_
print Dumper(@_);
Как я могу перебрать пары значений и создать переменные $ IP, $ username ..etc
Я создал
my $variables;
foreach my $key ( keys @_) {
my $key = @_->{$key}\n";
}
Но я всегда получаю ошибку.
Type of arg 1 to keys must be hash (not array dereference) at /perl/modules/Sentinel/Api.pm line 17, near "@_) "
Compilation failed in require at agent line 9.
BEGIN failed--compilation aborted at agent line 9.
2 ответа
Вообще говоря, keys
должен иметь следующую форму, где %something
- хеш, ключи которого вы хотите:
keys( %something )
^
|
@_
содержит ссылку на хэш, поэтому вы можете использовать следующее:
keys( %{ $_[0] } )
Вместо этого мы могли бы дать ему имя:
my ($hash) = @_;
for my $key ( keys( %$hash ) ) {
my $val = $hash->{$key};
...
}
Тем не менее, похоже, вам действительно нужно следующее:
my ($hash) = @_;
my $IP = $hash->{IP};
my $username = $hash->{username};
...
Если количество ссылок в @_
является переменным, последние два фрагмента становятся
for my $hash ( @_ ) {
for my $key ( keys( %$hash ) ) {
my $val = $hash->{$key};
...
}
}
А также
for my $hash ( @_ ) {
my $IP = $hash->{IP};
my $username = $hash->{username};
...
}
Если это действительно хэш, и это все, что вы отправляете, вы можете просто сделать:
my %hash = @_;
... потому что хеш - это просто список пар ключ-значение.
Если вы отправляете одну ссылку на хэш:
my $href = shift;
Похожие вопросы
Связанные вопросы
Новые вопросы
perl
Perl - это процедурный высокоуровневый динамический язык программирования общего назначения, известный своей собственной поддержкой регулярных выражений и возможностей синтаксического анализа строк. Пожалуйста, используйте этот тег для вопросов о Perl в целом. Для вещей, связанных с новым (но связанным) языком Raku (ранее «Perl 6»), используйте тег raku. Для регулярных выражений в стиле Perl на других языках используйте тег regex или, если они основаны на библиотеке PCRE, тег pcre.