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}的使用感到困惑: - (
答案 0 :(得分:4)
%items
是哈希引用的哈希值(概念上,哈希哈希值)。 $set
是%items
的关键,然后您将获得另一个哈希值,该哈希值已添加到密钥'a-logdate'
和'a-dataset'
。
(根据评论更正)
答案 1 :(得分:2)
Lou Franco的答案很接近,有一个小的印刷错误 - 哈希引用的哈希是%items
,而不是$items
。当您从$items{key}
检索值时,它被称为%items
,因为您要检索的值是标量(在本例中是哈希引用),但$items
将是不同的变量。