我将以下哈希传递给子例程
$VAR1 = {
'password' => 'abc123',
'IP' => '172.18.18.122',
'port' => '8080',
'username' => 'sensor1'
};
Run Code Online (Sandbox Code Playgroud)
当我用@_变量用户Dumper时,我得到了这些结果
print Dumper(@_);
Run Code Online (Sandbox Code Playgroud)
如何遍历值对并创建变量$ IP,$ username ..等
我创造了
my $variables;
foreach my $key ( keys @_) {
my $key = @_->{$key}\n";
}
Run Code Online (Sandbox Code Playgroud)
但我总是得到一个错误.
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.
Run Code Online (Sandbox Code Playgroud)
一般来说,keys应该有以下形式,其中%something是您想要的键的哈希:
keys( %something )
^
|
Run Code Online (Sandbox Code Playgroud)
@_ 包含对哈希的引用,因此您可以使用以下内容:
keys( %{ $_[0] } )
Run Code Online (Sandbox Code Playgroud)
相反,我们可以给它一个名字:
my ($hash) = @_;
for my $key ( keys( %$hash ) ) {
my $val = $hash->{$key};
...
}
Run Code Online (Sandbox Code Playgroud)
也就是说,听起来你真的想要以下内容:
my ($hash) = @_;
my $IP = $hash->{IP};
my $username = $hash->{username};
...
Run Code Online (Sandbox Code Playgroud)
如果引用的数量@_是可变的,则最后两个片段变为
for my $hash ( @_ ) {
for my $key ( keys( %$hash ) ) {
my $val = $hash->{$key};
...
}
}
Run Code Online (Sandbox Code Playgroud)
和
for my $hash ( @_ ) {
my $IP = $hash->{IP};
my $username = $hash->{username};
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |