2

文字をアルファベットのそれぞれの数字に変換しようとしています。うまくいくはずのハッシュがありますが、それを文字列に適用する方法がわかりません。

ストリング:

my $string = "abc";

そして私のハッシュ:

@hash{("a".."z")} = (1..26); 

この場合、文字列を 123 にする方法を教えてください。

4

2 に答える 2

1

一般的な解決策:

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;
于 2013-08-27T18:39:46.763 に答える