Обход структуры данных Perl - ссылка с последующим ключом

Результат: много строк HASH (0x1948958) ARRAY (0x1978250) ./directory/filename

Желаемый результат: [Ключ первого хэша] [Ключ второго хэша] ./directory/filename # (элементы массива, в настоящее время работающие)

Улов: Должен переноситься на структуры уровня N, отсюда и моя попытка при использовании Data :: Walk.

Что я действительно хочу делать, когда прохожу по структуре, так это ссылаться на ключ, который используется. Вроде как Data :: Dumper, но с разделением табуляцией вместо формата кода. вероятные решения (в порядке предпочтения):

  • Некоторые вызовы Data :: Walk, которые я пропустил.
  • Лучший модуль для этой задачи, о котором я не знаю.
  • Быстрый код фрагмент, который я могу встроить
  • Мой собственный модуль / вилка Data :: Walk / Data :: Dumper (сильно нахмурился), который добавит эту функциональность.

use strict;
use File::Basename;
use Data::Walk;

my $files;
while (<>) {
        chomp;
        #ls -l output in a file; referencing filename from it (8th column)
        my @line = split(/ /, $_, 8);
        #fileparse exported by File::Basename
        my ($name,$path) = fileparse($line[7]);
        open (my $fh, '<', $path . $name);
        my $sha = Digest::SHA->new('sha1');
        $sha->addfile($fh);
        #finding files by basename, then unique hash, then however many places it is stored.
        #question not why I don't use the hash as the first field.

        #basename    digest    path
        push(@{$files->{$name}->{$sha->hexdigest}}, $path . $name);
}

my @val;
sub walkit {
        $val[$Data::Walk::depth - 1] =  $_;
        if ($Data::Walk::depth == 3) {
                print join("\t", @val), "\n";
        }
}

&walk (\&walkit, %$files);

Гуру?

0
задан Jeff Ferland 3 October 2011 в 17:48
поделиться