詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

パール、アナルを使え!または私は如何にして Perl のワンライナーを書けるようになったか

簡単に言うとこういうことです。今日はこれだけ覚えて帰ってください。

perl -anal -e "…"

同様のオプションは Ruby でも使えます。

解説

-a

いきなり見かけないオプションですが、入力を空白文字で区切り、@F という配列に入れてくれます。それ以外の影響はないので使わないときでも指定して問題なし。2 回指定してるのも意味ないです。語呂合わせです。Ruby の場合は $F ですね。

-n

-e で指定されたコードを

LINE:
while (<>) {
    …
}

で囲みます。標準入力やファイルを一行ずつ処理するときに便利。sedgrep が簡単に書けますね。ワンライナーでは多様するオプションでしょう。代わりに -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();
}

おわりです

ひとりでできるもん ~オトコのコのためのアナニー入門~

ひとりでできるもん ~オトコのコのためのアナニー入門~

Released Class::Accessor::Lite::Lazy 0.03

Class-Accessor-Lite-Lazy-0.03 - Class::Accessor::Lite with lazy accessor feature - metacpan.org - Perl programming language

By default, the builder method name for an attribute $attr is named "_build_$attr". You can specify the builder method name/coderef using hashref.

use Class::Accessor::Lite::Lazy (
    ro_lazy => [
         'foo', # the buidler is assumed to be "_build_foo"
         { bar => '_mk_bar' },    # specify explicit builder method name
         { baz => \&_build_baz }, # or a coderef
    ],
);

If you specify all builders explicitly, you can use hashref instead of arrrayref.

use Class::Accessor::Lite::Lazy (
    ro_lazy => {
         foo => '_build_foo',
         bar => '_mk_bar',
         baz => \&_build_baz,
    },
);

Installing Term::ReadLine::Gnu with Homebrewed readline by cpanminus v1.7

Before 1.7

  • Support passing arguments to configure, build, test and install with —configure-args etc.

App-cpanminus-1.7000 - get, unpack, build and install modules from CPAN - metacpan.org - Tatsuhiko Miyagawa's blog

(σ^д^)σ Now you can install it in one command, without --look:

% cpanm Term::ReadLine::Gnu --configure-args="--prefix=$(brew --prefix readline)"

Success!!

はてなで一緒に働きませんか?