nam*_*ame 2 perl hash dereference
此代码有效:
my $href = shift @_; # get reference to hash
my %h = %{$href}; # dereference hash
Run Code Online (Sandbox Code Playgroud)
这个没有:
my %h = %{shift @_};
Run Code Online (Sandbox Code Playgroud)
除此之外:
my %h = ${$_[0]}
Run Code Online (Sandbox Code Playgroud)
为什么?
再精确一次:
1 #!/usr/bin/perl -w
2 use strict;
3 use warnings;
4
5 my %h;
6 sub a {
7
8 # that works - result 1
9 my $href = $_[0] || shift;
10 %h = %{$href};
11
12 # that does not work - result 0
13 # my %h = %{$_[0]};
14
15 # as well as that one - result 0
16 # my %h = %{shift @_};
17 $h{1}=2;
18 }
19
20 a(\%h);
21 print scalar (keys %h) . "\n";
Run Code Online (Sandbox Code Playgroud)
换句话说,第16行 - 它没有.
这会奏效.
my %h = %{shift @_};
Run Code Online (Sandbox Code Playgroud)
这不会.
my %h = ${$_[0]} # not ${$_[0]}
Run Code Online (Sandbox Code Playgroud)
应该是这个印记 %
my %h = %{$_[0]}
Run Code Online (Sandbox Code Playgroud)
还有use warnings;,和use strict;
提示:您上面的例子不工作的原因,仅仅是一个例子不声明词法变量%h = %{$href};不my %h = %{$href};
| 归档时间: |
|
| 查看次数: |
419 次 |
| 最近记录: |