標準入力から16進アスキーを 2文字ずつで区切って 標準出力にバイナリで出力する
#!/usr/bin/perl binmode STDOUT; while(<>){ s/[^0-9a-fA-F]//g; foreach $a ( /../g ) { print chr(hex($a)); } }
別にbinmode指定しなくてもよかった。というか効いてなさそう。
配列にしていじらなくてもpackで一発だった。
英数字以外の削除にtr使えるかと思ったけど、tr使うと長くなるのでやめた。というかホワイトスペースを消すだけにした。
#!/usr/bin/perl while(<>){ s/\s//g; print pack "H*",$_; }
1行にすると
perl -pe 's/\s//g;$_=pack"H*",$_'
になった。
n文字分割とかどうでもよくなった