アプリ版:「スタンプのみでお礼する」機能のリリースについて

アルファベット、数字を読み込んで、対応した文字、数字に変換し
出力したいのですが‥
例えば
[a-z ]= [1-26]と対応させ
a,b,5,7
を読み込んで
1,2,e,g
と出力させる感じです。
tr///などでコンパクトにまとめられるでしょうか?
お教え願います。

A 回答 (3件)

こんなんではどうでしょうか?



use strict;
use warnings;

while (my $line = <DATA>) {
chomp $line;
my @old = split q{,}, $line;
my @new = map { m/\d+/ ? chr($_ + 0x60) : ord($_)-ord('a')+1} @old;
print join(':', @new), "\n";
}


__END__
a,b,5,7

実行結果
1:2:e:g
    • good
    • 0
この回答へのお礼

有難うございます。
参考にさせていただきます。
初心者なのでまた質問があると思いますが
よろしくお願い致します。

お礼日時:2008/05/12 16:44

無理に one-liner にすると


perl -pe 'BEGIN { @cvt{"a" .. "z", 1 .. 26} = (1 .. 26, "a" .. "z"); } s/[[:alnum:]]+/$cvt{$&}/eg;'
とかできそうだけど... う~ん, 意味不明.
    • good
    • 0

a → 1


b → 2
c → 3

x → 24
y → 25
z → 26

1 → a
2 → b
3 → c
24 → x
25 → y
26 → z

の双方向の変換ですか?
数字が二桁になっちゃってるんで trでは無理でしょうね。

コンパクトに纏めるというのはどういったものを想定していますか?
たぶん tr ほげほげ のように一行かそこいらで書けるようなもの
だと思いますが。

この回答への補足

説明不足ですみません。
はい、双方向の変換です。
英字は数字に、数字は英字にといった具合です。

二、三行ではやはり無理でしょうか?
初心者で知識がないもので‥
お教え願います。

補足日時:2008/05/12 16:25
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!