Если вы пытаетесь сделать это без использования реальной базы данных, вам нужно иметь два индекса. Есть несколько способов сделать это, и вы на самом деле не дали достаточно информации о том, для чего вы это используете, но вот кое-что, что будет хорошо работать во многих случаях:
<code>
# Store student records sequentially, in any convenient order
my @student =
( { id=27, name => 'Alice Amber', class = 'X' }
, { id=2, name => 'Bob Brown', class = 'y' }
, ...
, { id=104, name => 'Zacharia Zebra', class = 'x' }
);
# build index by id
my @student_by_id;
$student_by_id[$student[$_]{id}] = $student[$_] for 0..$#student;
# build index by name
my %student_by_name;
$student_by_name{$student[$_]{name}} = $student[$_] for 0..$#student;
То, что вам дает, - это одна копия студенческих записей, хранящихся в @student в произвольном порядке, и два индекса с именами @student_by_id
и% student_by_name . Поскольку индексы хранят ссылки в записях учащихся, любые изменения, внесенные в запись с помощью любого индекса, будут видны с другого. Единственные проблемы возникают, когда вам нужно изменить либо имя студента, либо идентификационный номер, поскольку это потребует обновления затронутого индекса.