ハッシュ構造のキーとして「コンパイル済み正規表現」(つまり、形式:qr/../
の表現)を使用したいと考えています。ハッシュキーの「タイプ」を認識
ハッシュキーを反復処理するときに定数文字列とこれらの正規表現を区別するために、ref()
またはis_regexp()
を使用しようとしましたが、前者はnull文字列を返し、後者は機能しません。私は、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 []
ハッシュのキーは文字列です。 'ref'はそれらに対して常に' undef'を返します。文字列でないキーとして何かを使用すると、文字列に変換されます。 – Qtax