全角英数字を半角に
dankogaiさんのブログ記事を見て、dankogaiさんが脊髄でひねり出したという
perl -CIO -ple 'tr/\x{FF01}-\x{FF5e}/\x21-\x7e/'
をrubyでやってみようということで、ひねり出したのがこちら
まずは1.8バージョン
ruby -Ku -rjcode -e 'print gets(nil).tr("#{[0xff01].pack("U")}-#{[0xff5e].pack("U")}", "#{[0x21].pack("U")}-#{[0x7e].pack("U")}")'
さすがに脊髄でひねり出すってわけにはいかなかった、実際これにたどりつくまでに数時間要してます・・・。
1.9だともっと簡単になります。
ruby -Ku -e 'print gets(nil).tr("\u{ff01}-\u{ff5e}","\u{21}-\u{7e}")'
NKF使えばこういう風にもできるらしい。
#!/usr/local/bin/ruby -Ke require 'nkf' while line = DATA.gets puts NKF.nkf('-m0Z1', line) end
それじゃあってことで、それをワンライナーにしてみた。
ruby -Ks -rnkf -e 'print NKF.nkf("-m0Z1", gets(nil))'
これだと、-K オプションの指定さえ適切にしてやれば、どの文字コードでも対応できますね。
はてなハイク楽しすぎ、完全にはまった。