Результат: много строк HASH (0x1948958) ARRAY (0x1978250) ./directory/filename
Желаемый результат: [Ключ первого хэша] [Ключ второго хэша] ./directory/filename # (элементы массива, в настоящее время работающие)
Улов: Должен переноситься на структуры уровня N, отсюда и моя попытка при использовании 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);
Гуру?