# Perl でワンライナー書くときの -e の位置 Perl ワンライナーで [[http://hirobanex.net/article/2013/10/1380731649|eオプションの後にオプションがあるとコードが解読できない]] のはなぜかという話にワンライナー芸人として反応してみる。ちなみに結論を先に書くと、Perl の話ではないですねこれ。 例えば、 $ perl -MO=Deparse -el 'print 1;' '???'; -e syntax OK 上のように `-el 'print 1;'` だと動かなくて、 $ perl -MO=Deparse -le 'print 1;' BEGIN { $/ = "\n"; $\ = "\n"; } print 1; -e syntax OK `-le 'print 1;'` という風に `le` の順だと動くと。 もちろん、以下は動く。 $ perl -MO=Deparse -l -e 'print 1;' BEGIN { $/ = "\n"; $\ = "\n"; } print 1; -e syntax OK ## こたえ -e は引数を取るからです。`-e 'print 1;'` は `-e='print 1;'` ということで、例えば以下は動きますね。 $ perl -MO=Deparse -e 'print 1;' -l BEGIN { $/ = "\n"; $\ = "\n"; } print 1; -e syntax OK 最初に書きましたが、これは Perl の話というより、コマンドラインのパーサーの話です。 コマンドラインパーザの流れは英語版 wikipedia の {{wikipedia:en: Getopt}} にある history がよくまとまってる気がします。もしくは POSIX の方の {{wikipedia:en: Getopts}} ページ。GNU 拡張の `getopt_long` あたりから、perl のコマンドラインオプションを解釈する定番の {{cpan: Getopt::Long}} があったりするわけですね。