my %hash = ('red' => "John", 'blue' => "Smith");
func (%hash);
sub func {
my $hash = $_[0];
print "$hash{'red'}\n";
print "$hash{'blue'}\n";
}
Run Code Online (Sandbox Code Playgroud)
我将哈希发送到子例程,并将此哈希视为标量.如果是这样,我怎么可能通过调用它的键来转向哈希值?
ike*_*ami 12
func(%hash);
Run Code Online (Sandbox Code Playgroud)
相当于
func('red', 'John', 'blue', 'Smith');
-or-
func('blue', 'Smith', 'red', 'John');
Run Code Online (Sandbox Code Playgroud)
所以
my $hash = $_[0];
Run Code Online (Sandbox Code Playgroud)
相当于
my $hash = 'red';
-or-
my $hash = 'blue';
Run Code Online (Sandbox Code Playgroud)
完全没用.你永远$hash不会再使用的好东西.
相反,您使用%hashsub之外的声明.您可以通过重新排序代码或限制范围(可见性)来查看%hash.
use strict;
use warnings;
{
my %hash = ('red' => "John", 'blue' => "Smith");
func(%hash);
}
sub func {
my $hash = $_[0];
print "$hash{'red'}\n";
print "$hash{'blue'}\n";
}
Run Code Online (Sandbox Code Playgroud)
$ perl a.pl
Global symbol "%hash" requires explicit package name at a.pl line 11.
Global symbol "%hash" requires explicit package name at a.pl line 12.
Execution of a.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)
解决方案是传递参考.
use strict;
use warnings;
{
my %hash = ('red' => "John", 'blue' => "Smith");
func(\%hash);
}
sub func {
my $hash = $_[0];
print "$hash->{'red'}\n";
print "$hash->{'blue'}\n";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |