Похоже, вам также нужна таблица сопоставления String -> Int
.
В Perl самый простой способ сделать это - tie
хэш-файл DBM (см. man perltie
).
Пример кода, не проверенный, почти наверняка может быть улучшен:
use DB_File;
tie %value2index, 'DB_File', 'value2index';
tie %index2value, 'DB_File', 'index2value';
sub index_count() {
return scalar %value2index;
}
sub value_exists() {
my $value = shift;
return exists($value2index{$value});
}
sub append() {
my $value = shift;
if (!value_exits($value)) { # prevent duplicate insertions
my $index = index_count() + 1;
$value2index{$value} = $index;
$index2value{$index} = $value;
}
}
sub find_index() {
my $value = shift;
return $value2index{$value};
}
sub find_value() {
my $index = shift;
return $index2value{$index};
}
Не используйте это в многопоточной среде, здесь есть неатомарные операции.