全角英数字を半角に

dankogaiさんのブログ記事を見て、dankogaiさんが脊髄でひねり出したという


perl - dankogai - はてなハイク

perl -CIO -ple 'tr/\x{FF01}-\x{FF5e}/\x21-\x7e/'


rubyでやってみようということで、ひねり出したのがこちら


まずは1.8バージョン


ruby - endor - はてなハイク

ruby -Ku -rjcode -e 'print gets(nil).tr("#{[0xff01].pack("U")}-#{[0xff5e].pack("U")}",
"#{[0x21].pack("U")}-#{[0x7e].pack("U")}")'


さすがに脊髄でひねり出すってわけにはいかなかった、実際これにたどりつくまでに数時間要してます・・・。


1.9だともっと簡単になります。


ruby - endor - はてなハイク

ruby -Ku -e 'print gets(nil).tr("\u{ff01}-\u{ff5e}","\u{21}-\u{7e}")'


NKF使えばこういう風にもできるらしい。


ruby - ihag - はてなハイク

#!/usr/local/bin/ruby -Ke
require 'nkf'
while line = DATA.gets
puts NKF.nkf('-m0Z1', line)
end


それじゃあってことで、それをワンライナーにしてみた。


ruby - endor - はてなハイク

ruby -Ks -rnkf -e 'print NKF.nkf("-m0Z1", gets(nil))'


これだと、-K オプションの指定さえ適切にしてやれば、どの文字コードでも対応できますね。


はてなハイク楽しすぎ、完全にはまった。