はじめに
CTFで二つの文字列同士のXORをさっと確認したくなったが、うまく動かなくて四苦八苦した。
それを記事にしたのは良かったが、結局-Eオプションとかfeatureプラグマとかバージョンの話ばかりで困ったときに誰もあの記事にたどり着けないだろうと思ったのでこっちに簡潔にメモ。
文字列同士のXORをとるワンライナー
一方の文字列を"abcd"、もう一方の文字列を"1234"とすると以下のようになる。
$ perl -e 'print "abcd" ^ "1234"'
$ perl -E 'say "abcd" ^. "1234"'
-eオプションのときの文字列のXOR演算子は、^
-Eオプションのときの文字列のXOR演算子は、^.となる。
-eと-Eでは文字列のビット演算子が異なる。
演算子 | -e | -E |
---|---|---|
and | & | &. |
or | | | |. |
xor | ^ | ^. |
not | ~ | ~. |
詳しくは前回の記事を参考されたし。
Perlの-Eオプションとfeatureプラグマに潜む罠 - Qiita