1

ここでPerlの初心者...私はいくつかのHASHコードでこの動作するperlスクリプトを手伝ってくれました、そして私はそのコードを理解するのに助けが必要です、そしてそれが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}の使用と混同していると思います:-(

4

2 に答える 2

5

%itemsハッシュ参照のハッシュ(概念的には、ハッシュのハッシュ)です。 $setがキーになり、キーと%itemsで追加されている別のハッシュが返されます。'a-logdate''a-dataset'

(コメントに基づいて修正)

于 2010-08-03T18:17:00.213 に答える
2

Lou Francoの答えは近いですが、1つの小さな誤植があります。ハッシュ参照のハッシュは%items、ではなく$itemsです。取得する値はスカラー(この場合はハッシュ参照)であるため、$items{key}から値を取得する場合と呼ばれますが、変数は異なります。%items$items

于 2010-08-03T18:25:20.673 に答える