"aaa","asd" => "bbb"); my %d-6ren">
gpt4 book ai didi

珀尔 : Dereference between @_ and $_

转载 作者:行者123 更新时间:2023-12-01 11:03:29 24 4
gpt4 key购买 nike

我对以下代码有疑问:

#!/usr/bin/perl

use strict;
use warnings;

my %dmax=("dad" => "aaa","asd" => "bbb");
my %dmin=("dad" => "ccc","asd" => "ddd");

&foreach_schleife(\%dmax,\%dmin);

sub foreach_schleife {
my $concat;
my $i=0;

foreach my $keys (sort keys %{$_[0]}) {
while ($_[$i]) {
$concat.="$_[$i]{$keys} ";
print $_[$i]{$keys}."\n";
$i++;
}
$i=0;
$concat="";
}
}

输出是:

   bbb
ddd
aaa
ccc

我不明白这个。通常你必须取消对散列、数组等的引用。为什么不在这里?写就够了:

$_[$i]{$keys}."\n";

不是那样的:

$$_[$i]{$keys}."\n";

为什么?和@_/$_变量的特殊性有关系吗?

最佳答案

我的猜测是,因为数组(或散列,就此而言)只能包含散列引用,您的第二个索引行为意味着引用被理解

我认为开发人员需要更好地记录这一点。

要看到它对*_ 没有什么特别之处,你可以在循环之前试试这个:

my @a = @_;

这期间:

print $a[$i]{$keys}."\n";

我认为最主要的是,如果您有一个标量引用作为基础,那么至少需要一个->。所以

my ( $damxr, $dminr ) = @_;

需要

$dmaxr->{ $key };

关于珀尔 : Dereference between @_ and $_,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8475223/

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