- ベストアンサー
アルファベット、数字を読み込んで変換出力
アルファベット、数字を読み込んで、対応した文字、数字に変換し 出力したいのですが‥ 例えば [a-z ]= [1-26]と対応させ a,b,5,7 を読み込んで 1,2,e,g と出力させる感じです。 tr///などでコンパクトにまとめられるでしょうか? お教え願います。
- みんなの回答 (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
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
無理に one-liner にすると perl -pe 'BEGIN { @cvt{"a" .. "z", 1 .. 26} = (1 .. 26, "a" .. "z"); } s/[[:alnum:]]+/$cvt{$&}/eg;' とかできそうだけど... う~ん, 意味不明.
- sakusaker7
- ベストアンサー率62% (800/1280)
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 ほげほげ のように一行かそこいらで書けるようなもの だと思いますが。
補足
説明不足ですみません。 はい、双方向の変換です。 英字は数字に、数字は英字にといった具合です。 二、三行ではやはり無理でしょうか? 初心者で知識がないもので‥ お教え願います。
お礼
有難うございます。 参考にさせていただきます。 初心者なのでまた質問があると思いますが よろしくお願い致します。