Код: Выделить всё
65590;Перловица;unio;реки севера России и Скандинавии
56331;речная;margaritifera;север Европы
10616;жемчужница;martensii;Японское море
36816;стромбус;gigas;Куба
Код: Выделить всё
use DB_File; # модули для работы с DBM
use Storable qw(freeze thaw); # и сохранения данных
my %database; # хэш "привязывается"...
tie %database, "DB_File", "mollusc.db" or die; # ...к БД
open my $text, '<', 'mollusc.txt' or die; # файл, откуда
while (my $data = <$text>) { # читаем данные,
chomp($data); # удаляя \n
# и разбивая строку на поля по разделителю ';':
my ($id, $name, $latin, $area) = split(';', $data);
my %record = ( # заполняем поля записи БД:
ID => $id, # идентификатор экземпляра
NAME => $name, # наименование моллюска
LATIN => $latin, # латинское название
AREA => $area); # ареал обитания
my $serialized = freeze \%record; # "замораживаем"
$database{$id} = $serialized; # и сохраняем запись
}
close $text; # закрываем тестовый файл
untie %database; # и базу данных
Код: Выделить всё
use DB_File; # модули для работы с DBM
use Storable qw(freeze thaw); # и сохранения данных
my %database; # хэш "привязываем"...
tie %database, "DB_File", "mollusc.db" or die; # ...к БД
my $id = 65590; # ищем "Перловицу"
if (exists $database{$id}) { # по идентификатору
my $serialized = $database{$id}; # считываем и
%record = %{ thaw($serialized) }; # "размораживаем"
printf "%5d %s %s %s\n", # запись БД в хэш
$id, $record{NAME}, $record{LATIN};
}
untie %database; # "отвязываем" БД от хэша
# будет выведено: 65590 Перловица Unio pictorum
у меня есть $latin0="u"; мне нужно посмотреть есть ли он в базе!!!!
перебрал вот так, не печатает
Код: Выделить всё
while (($latin)= each %record) {
print $latin;
и не получаеться вывести latin
Код: Выделить всё
use DB_File;
use Storable qw(freeze thaw);
my %database;
tie %database, "DB_File", "mollusc.db" or die;
my $latin = unio;
if (exists $database{$latin}) {
my $serialized = $database{$latin};
%record = %{ thaw($serialized) };
printf "%d", $record{$latin};
}
untie %database;
в man Storable всё почти так и написано :new_ranting2: :new_ranting2: :new_alien: