2

このコードは機能します:

  my $href = shift @_;    # get reference to hash
  my %h = %{$href};       # dereference hash

これはしません:

  my %h = %{shift @_};

これと同様に:

  my %h = ${$_[0]}

なんで?

=============================

もう一度正確に言うと:

 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";

言い換えれば、16行目-そうではありません。

4

1 に答える 1

6

これは機能します。

  my %h = %{shift @_};

これはしません。

  my %h = ${$_[0]} # not ${$_[0]}

その印章は%

  my %h = %{$_[0]}

またuse warnings;、、、use strict;


ヒント:上記の例が機能しない理由は、1つの例だけが字句変数%h = %{$href};を宣言していないためですmy %h = %{$href};

于 2010-06-03T15:35:32.773 に答える