Я бы хотел использовать «скомпилированное регулярное выражение» (я имею в виду: выражение в форме qr/../
) в качестве ключа для хэш-структуры.
Чтобы различать константы и эти регулярные выражения при переборе хеш-ключей, я пытался использовать ref()
или is_regexp()
, но первая возвращает пустую строку, а вторая не работает. Боюсь, я упускаю что-то фундаментальное из ссылок на Perl и скаляров.
Кроме того, мое решение, похоже, работает. Это слишком уродливо в любом случае?
Любое альтернативное предложение приветствуется.
Некоторый код для понимания функции ref()
:
my $regex = qr/foo/;
printf "ref(\$regex): %s \n", ref($regex);
printf "is_regexp(\$regex): %d \n", is_regexp($regex);
# ref($regex): Regexp
# is_regexp($regex): 1
my $scalar = 3;
printf "ref(\$scalar): [%s] \n", ref($scalar);
# ref($scalar): []
my %my_hash = ('name', 'Becky', 'age', 23);
for my $k (keys %my_hash) {
printf "%s [%s] -> %s [%s] \n", $k, ref($k), $my_hash{$k}, ref($my_hash{$k});
}
# name [] -> Becky []
# age [] -> 23 []