"Smith"); func (%hash); sub func { my $hash = $_[0]; -6ren">
gpt4 book ai didi

Perl:这段代码怎么可能有效?

转载 作者:行者123 更新时间:2023-12-01 04:44:14 25 4
gpt4 key购买 nike

my %hash = ('red' => "John", 'blue' => "Smith"); 
func (%hash);

sub func {
my $hash = $_[0];
print "$hash{'red'}\n";
print "$hash{'blue'}\n";
}

我向一个子程序发送一个散列,这个散列被视为标量。如果是这样,我怎么可能通过调用它的键来转换散列中的值?

最佳答案

func(%hash);

相当于
func('red', 'John', 'blue', 'Smith'); 
-or-
func('blue', 'Smith', 'red', 'John');

所以
my $hash = $_[0];

相当于
my $hash = 'red';
-or-
my $hash = 'blue';

完全没用。好东西你从不使用 $hash以后再。

相反,您使用 %hash在子之外声明。您可以通过重新排序代码或限制 %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";
}


$ 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.

解决方法是传递一个引用。
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";
}

关于Perl:这段代码怎么可能有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27864350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com