Есть такая задача - парсить текстовые файлы и сохранять значения ключей и значений. Текстовые файлы могут включать ссылки на другие текстовые файлы, которые тоже надо парсить. Делается это так:
#!/usr/bin/perl -w
use strict;
use warnings;
my $file = "file.txt";
sub read_recur($$);
sub read_recur($$)
{
my ($filename, $hash_ref) = @_;
open (my $fh, '<', $filename) or die "Could not open file $filename\n";
while (my $row = <$fh>) {
if ($row !~ /^\s*#/)
{
chomp($row);
if ($row =~ m/(\w+)\s+"(.*)"/)
{
$hash_ref->{$1} = $2;
}
if ($row =~ m/%LOAD%\s+"(.*)"/)
{
my $new_filename = $1;
$new_filename =~ s/\%(\w+)\%/$ENV{$1}/g;
read_recur($new_filename, $hash_ref);
}
}
}
close ($fh) or die "Could not close $filename\n";
}
sub read($)
{
my $filename = shift;
my $hash_ref = {};
read_recur($filename, $hash_ref);
return $hash_ref;
}
my $hash_ref = read($file);
while( my ($k, $v) = each %$hash_ref ) {
print "key: $k, value: $v.\n";
}
Все было бы хорошо, но значения считываются только с первого файла, значения из рекурсивного вызова не добавляются в хеш, Подскажите, ЧЯДНТ?