Это странная часть вашего кода:
push @{$data->{$arg}}, $fh;
$fh
- дескриптор файла.Вот почему вы получаете этот вывод.Каждый раз, когда вы зацикливаетесь, вы добавляете в свою структуру данных одно и то же значение (дескриптор файла).
'skai.txt' => [
\*{'::$fh'},
$VAR1->{'skai.txt'}[0],
$VAR1->{'skai.txt'}[0],
$VAR1->{'skai.txt'}[0]
],
Первое значение (\*{'::$fh'}
) - просто Data :: Dumper, слегка усложненныйспособ сказать "ссылка на дескриптор файла, который хранится в $fh
".Три последующих значения - это Data :: Dumper, говорящий «это значение, которое уже появляется в этой структуре данных, поэтому вместо того, чтобы записывать это значение снова, я просто покажу вам ссылку на существующее значение».
Я думаю, что если вы измените эту строку на:
push @{$data->{$arg}}, $_;
Тогда вы получите нечто намного ближе к тому, что вы хотели.