我将以下哈希传递给子程序
$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.
答案 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;