perl - 在散列 Perl 中增加值

标签 perl

我正在尝试增加散列值,但我得到了令人困惑的输出。我将一组数组、散列和标量值传递给一个函数。

下面的代码打算首先查看它是否是哈希,如果是,则遍历值并递增它们。

elsif (ref($_) eq "HASH"){

        foreach $s (values %{$_}){
            $s++;
        }
    }

我正在传递以下哈希值:

 { a => 1, b => 2, c => 3  }, { d => 4, e => 5 },

然而,当我打印或返回 $s 时,我得到不同的输出,例如:

4 2 3 5 6

2 4 3 6 5

或其他一些随机变化。显然,我想要的是,

2 3 4 5 6

我敢肯定这很简单,但我对 Perl 不是很有经验。

最佳答案

哈希在 Perl 中没有排序。如果要对值进行排序,请对它们进行排序:

#! /usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

my $ref = { a => 1, b => 2, c => 3 };

$_++ for values %$ref;
say join ' ', sort values %$ref;        # By values.
say join ' ', @$ref{ sort keys %$ref }; # By keys.

关于perl - 在散列 Perl 中增加值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46299218/

相关文章:

perl - 如何在 Perl 中使用 fork()?

perl - 如何使用带有 mod_perl 的调试器

perl - Perl的新功能,大括号/语法问题

perl - 为什么打印语句的行为顺序相反?

在嵌入式 C 应用程序中从 Perl 调用 C 函数

perl - 如何驯服 Perl 文件的 Vim 关键字(不是omni)完成?

Excel::Writer::XLSX 写入未格式化的日期

perl - 使用弃用的 $* 重写旧程序

windows - 需要在 Windows 中使用 perl 删除所有空子目录

perl - 使用 perl 使用 sendmail 发送电子邮件