コンパイル時にリテラルだと最適化してくれる組み込み関数
length('rightgo09')みたいにすると、コンパイルの時点で9にしてくれていることを知った。
my $len = length('rightgo09');
$ perl -MO=Deparse len.pl my $len = 9; len.pl syntax OK
演算結果なんかはしていると聞いてたけど、関数でもなるのかーへーと思って他でもやってみた。
http://perldoc.perl.org/perlfunc.html
最適化する | 最適化しない |
---|---|
chr, crypt, hex, lc, lcfirst, length, oct, ord, sprintf, uc, ucfirst, quotemeta, abs, atan2, cos, exp, hex, int, log, oct, sin, sqrt | index, pack, reverse, rindex, substr, m/()/, split, rand |
grepとかjoinとかはできるかもと思ったが配列操作関係は全部実行時にしているみたい。
あとuse constant XXX;するとコンパイル時に置き換わるだけなので上記の最適化対象になる。
蛇足:以下のような感じで確かめてた。
substr
my $cut = substr('rightgo09', 1, 2);
$ perl -MO=Deparse substr.pl my $cut = substr('rightgo09', 1, 2); substr.pl syntax OK
だめだた。
chr
my $char = chr(65);
$ perl -MO=Deparse chr.pl my $char = 'A'; chr.pl syntax OK
できた。