文字をアルファベットのそれぞれの数字に変換しようとしています。うまくいくはずのハッシュがありますが、それを文字列に適用する方法がわかりません。
ストリング:
my $string = "abc";
そして私のハッシュ:
@hash{("a".."z")} = (1..26);
この場合、文字列を 123 にする方法を教えてください。
一般的な解決策:
my %lookup; @lookup{"a".."z"} = 1..26;
my $pat = '(?:'.( join '|', map quotemeta, keys %lookup ).')';
s/($pat)/$lookup{$1}/g;
キーは最大 1 文字で構成されると仮定します。
my %lookup; @lookup{"a".."z"} = 1..26;
my $class = '['.( join '', map quotemeta, keys %lookup ).']';
s/($class)/$lookup{$1}/g;
「ハードコード」:
$string =~ s/([a-z])/ ord($1) - ord('a') + 1 /ge;