2013-08-27 55 views
3

我試圖將字母轉換爲其在字母表中的相應數字。我有一個我認爲應該工作的散列,我只是不知道如何將它應用到我的字符串。將我的散列應用於字符串以從字母中獲取數字

字符串:

my $string = "abc"; 

和我的哈希:

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

如何讓我的字符串是在這種情況下,123?

回答

5

substitution

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"; 
+0

是一個比其他更好嗎? – BluGeni

+0

這取決於你的「更好」的定義:)你更喜歡哪一個? ord解決方案的代碼較少,但是更易於理解和維護? – toolic

+0

注意:既不處理a..z之外的字符。那是問題嗎? – ikegami

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; 
相關問題