2

我正在尝试将字母转换为字母表中各自的数字。我有一个我认为应该工作的哈希我只是不知道如何将它应用到我的字符串。

细绳:

my $string = "abc";

和我的哈希:

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

在这种情况下,我如何让我的字符串为 123?

4

2 回答 2

5

替代

use warnings;
use strict;

my $string = "abc";
my %hash;
@hash{("a".."z")} = (1..26); 
$string =~ s/(.)/$hash{$1}/g;
print "$string\n";

__END__

123

更新:另一种没有哈希的方法是使用ord

my $string = "abc";
$string =~ s/(.)/ord($1) - 96/ge;
print "$string\n";
于 2013-08-27T17:41:44.433 回答
1

一般解决方案:

my %lookup; @lookup{"a".."z"} = 1..26;
my $pat = '(?:'.( join '|', map quotemeta, keys %lookup ).')';

s/($pat)/$lookup{$1}/g;

假设键最多包含一个字符:

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 回答