簡単に言うとこういうことです。今日はこれだけ覚えて帰ってください。
perl -anal -e "…"
同様のオプションは Ruby でも使えます。
解説
-a
いきなり見かけないオプションですが、入力を空白文字で区切り、@F
という配列に入れてくれます。それ以外の影響はないので使わないときでも指定して問題なし。2 回指定してるのも意味ないです。語呂合わせです。Ruby の場合は $F
ですね。
-n
-e
で指定されたコードを
LINE: while (<>) { … }
で囲みます。標準入力やファイルを一行ずつ処理するときに便利。sed や grep が簡単に書けますね。ワンライナーでは多様するオプションでしょう。代わりに -p を指定することで最後に print;
することもできます。
-l
-n
や -p
が指定されているときに各入力を chomp
します。また、各出力に改行を追加します。
というのが表面的な説明で、実際には $/
や $\
などの特殊な変数の値が書き変わっています。-0
と組み合わせると場合によっては便利です。
% perl -ln0 -e "…"
などとすると入力を "\0" で区切り、各出力の末尾に改行文字が追加されるようになります。
ちなみに
この辺の話は perldoc perlrun
で読めます。
B::Deparse を使うと何が起こっているのか分かりやすいですね。
% perl -MO=Deparse -anal -e 'poyo()' BEGIN { $/ = "\n"; $\ = "\n"; } LINE: while (defined($_ = <ARGV>)) { chomp $_; our(@F) = split(' ', $_, 0); poyo(); }
おわりです
- 作者: あぶひゃく
- 出版社/メーカー: メディアックス
- 発売日: 2009/11/25
- メディア: 単行本(ソフトカバー)
- 購入: 35人 クリック: 754回
- この商品を含むブログ (34件) を見る