【问题标题】:help understanding perl hash帮助理解 perl 哈希
【发布时间】:2011-03-24 21:15:38
【问题描述】:

这里是 Perl 新手...我在这个工作 perl 脚本中获得了一些 HASH 代码的帮助,我只需要帮助理解该代码以及是否可以以一种我更容易或更直观地理解 HASHES 使用的方式编写它??

总而言之,该脚本执行一个正则表达式来过滤日期,其余的正则表达式将提取与该日期相关的数据。

use strict;
use warnings;
use constant debug => 0;
my $mon = 'Jul';
my $day = 28;
my $year = 2010;
my %items = ();

while (my $line = <>)
{
    chomp $line;
    print "Line: $line\n" if debug; 
    if ($line =~ m/(.* $mon $day) \d{2}:\d{2}:\d{2} $year: ([a-zA-Z0-9._]*):.*/)
    {
        print "### Scan\n" if debug;
        my $date = $1;
        my $set = $2;
        print "$date ($set): " if debug;
        $items{$set}->{'a-logdate'} = $date;
        $items{$set}->{'a-dataset'} = $set;
        if ($line =~ m/(ERROR|backup-date|backup-size|backup-time|backup-status)[:=](.+)/)
        {
            my $key = $1;
            my $val = $2;
            $items{$set}->{$key} = $val;
            print "$key=$val\n" if debug;
        }
    }
}

print "### Verify\n";
for my $set (sort keys %items)
{
    print "Set: $set\n";
    my %info = %{$items{$set}};
    for my $key (sort keys %info)
    {
        printf "%s=%s;", $key, $info{$key};
    }
    print "\n";
}

我想了解的是以下几行:

        $items{$set}->{'a-logdate'} = $date;
        $items{$set}->{'a-dataset'} = $set;

又是几行:

        $items{$set}->{$key} = $val;

这是一个哈希引用的例子吗?散列的散列?
我想我对 {$set} 的使用感到困惑 :-(

【问题讨论】:

标签: perl hash hash-of-hashes


【解决方案1】:

%items 是散列引用的散列(从概念上讲,是散列的散列)。 $set%items 的密钥,然后您会返回另一个哈希,该哈希与密钥'a-logdate''a-dataset' 一起添加。

(根据 cmets 修正)

【讨论】:

  • 感谢您的回复。当你用 2 个新键说“然后你得到另一个哈希”时......那么它是指回自己吗?
  • 不,从概念上讲,items 中的每个散列键值对都是另一个散列的键。 $set 是 %items 的键。您会为每个键返回另一个哈希值。这就像一棵两层树。 $set 是第一级,a-logdate 是第二级。
【解决方案2】:

Lou Franco 的答案很接近,有一个小的印刷错误——哈希引用的哈希是 %items,而不是 $items。当您从%items 检索值时,它被称为$items{key},因为您检索的值是一个标量(在本例中为哈希引用),但$items 将是一个不同的变量。

【讨论】:

    猜你喜欢
    • 2014-09-20
    • 2011-04-01
    • 2019-05-07
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    相关资源
    最近更新 更多