我对以下代码有疑问:

#!/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";

为什么? 它与变量@_ / $_吗?

===============>>#1 票数:3

我的猜测是因为一个数组(或哈希,就此而言)只能包含哈希引用,你的第二个索引行为意味着理解引用。

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

要看到它对*_不特殊,你可以在循环之前尝试这个:

my @a = @_;

这期间:

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

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

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

需要

$dmaxr->{ $key };

===============>>#2 票数:3

您不必取消引用$_[0]$_[1]$_[$i]{$keys}$_[$i]->{$keys}的有效简写符号当你的引用在数组或哈希中时, $_[$i]->{$keys}

$$_[$i]{$keys}不起作用,因为它会尝试将特殊变量$_取消引用到标量。 正确的语法是%{$_[$i]} ,但是你必须使用%{$_[$i]}->{$keys} ,这更详细。

===============>>#3 票数:0 已采纳

@_是子例程参数的数组,因此$_[$index]访问$index处的元素

如果您有引用,则取消引用只会很好,但@_不是一个引用。

  ask by Hakan Kiyar translate from so

未解决问题?本站智能推荐:

1回复

如何在Perl中为子例程引用和取消引用哈希哈希

有谁知道如何取消对哈希哈希的引用,以便可以在子例程中使用它。 如您所见,我在子程序中无法访问哈希表的哈希数据结构。 我在%HoH{$protein}{'degree'}附近的%HoH{第二行%HoH{$protein}{'degree'}上遇到语法错误,并且散列的哈希无法识别%HoH
3回复

传递给子例程时Perl引用和引用哈希值?

我现在已经在这个问题上敲了大约5个小时,我真的很沮丧,需要一些帮助。 我正在编写一个Perl脚本,用于从MySQL表中提取作业,然后执行各种数据库管理任务。 当前的任务是“创建数据库”。 该脚本成功创建了数据库,但是当我为PHP开发人员生成配置文件时,它就会爆炸。 我认为引用和解
4回复

Perl:如何在不创建数组副本的情况下取消引用数组?

当我使用@ $ arrayRef或@ {$ arrayRef}取消引用数组时,它似乎会创建该数组的副本。 是否有解引用数组的正确方法? 此代码... ...具有输出... 如您所见,@ $ aRef创建一个新的指针地址。 我发现解决此问题的唯一方法是仅使用引用:
1回复

无法在Perl中的子例程散列内触发子例程

嗨,我是perl的新手。 我有一个包含子例程的perl哈希。 我尝试以网上找到的各种方式来运行它。 但是似乎没有任何作用。 我的代码: 我已经尝试了以下方法。 结果为以下输出: CODE(<十六进制十进制值>) 然后我尝试 结果如下
3回复

如何在Perl中通过引用传递哈希值

我有以下代码,我写过截断大值。 我正在使用另一个子例程中的调用来调用此子例程 但是,当我检查$ EMAIL {$ tag}仍指向非截断值时。 难道我做错了什么?
1回复

为什么我没有收到Perl的警告?

考虑以下两个用例: 和 第一个产生Variable will not stay shared警告,而第二个则不。 似乎在两种情况下都不共享该变量。 为什么在第二种情况下没有任何警告?
3回复

Perl子例程中的未定义变量

我是Perl的新手,希望对理解子例程有所帮助。 在子例程中,是否某些变量始终是未定义的? 这是因为子例程中的变量是私有的吗? 那么,如果我想定义之前未定义的变量,该怎么办呢? 提前致谢。
2回复

为什么这行Perl本身只包含一个变量?

我更喜欢perl,但是我对我在一个模块子程序中看到的一条线路有疑问。 抛出我的只是看到$var本身就在一条线上。 这只是回归1的迂回方式吗? 非常感谢! 简
1回复

perl调用子例程生成不起作用的随机字符串

生成随机字符串的脚本: 但是,它不在子例程中时起作用。 如果$ string是全局变量,也可以使用。 我错过了什么? 谢谢,
3回复

如何在Perl中通过多个子例程传递变量?

我在子例程中有一个变量currentUser。 它执行一个子例程,但不执行另一个子例程。 如何在保留值的同时通过多个子例程传递变量? 当我尝试执行相同的操作时,html_form子项与currentUser在html_form之后的新子项中进行操作),变量不会显示为用户在登录期间输入