Perl - 如何在循环@_变量时创建变量

时间:2016-04-27 13:01:43

标签: perl

我将以下哈希传递给子程序

$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 个答案:

答案 0 :(得分:5)

一般来说,RICHTEXT_WIDGET_CLASS = 'mezzanine_pagedown.widgets.PageDownWidget' RICHTEXT_FILTER = 'mezzanine_pagedown.filters.custom' RICHTEXT_FILTERS = (RICHTEXT_FILTER,) PAGEDOWN_MARKDOWN_EXTENSIONS = ('extra','codehilite','toc') RICHTEXT_FILTER_LEVEL = 3 #changed from 3. This allows iframes. PAGEDOWN_SERVER_SIDE_PREVIEW = True 应该具有以下形式,其中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};
      ...
   }
}

答案 1 :(得分:1)

如果它真的是一个哈希,并且你发送的所有内容都是,那么你可以这样做:

my %hash = @_;

...因为哈希只是一个键值对的列表。

如果您要发送一个哈希引用:

my $href = shift;