perl -le 'my $a = 0 or 1; print $a' => 0
perl -le 'my $a = 0 || 1; print $a' => 1
何も考えずに書くと、秘かに狂った結果が出ていて、きっと痛い目に遭う。
しかし、perlは、何も考えずに書けるように、そして、コードを読む方はあまり重視されない方向性でこれまで使われてきた言語である。
勿論、読みやすく書く努力はperlでも可能だが……。
"hoge" =~ /^hoge$/
"hoge\n" =~ /^hoge$/
"hoge\n" =~ /^hoge\z/
perl -d:DProf スクリプトファイル名
dprofpp tmon.out
goto &hoge;
goto \&hoge;
my $sub = sub { ‥… }; # 予め無名関数を作っておき、 goto $sub; # 関数refでgotoする
my $hashref = { aaa => 123, bbb => 456, ccc => 789, }; my $values = [ @{$hashref}{qw[ aaa ccc ]} ];
my $arrayref = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]; my $values = [ @{$arrayref}[3..7] ];
local $SIG{TERM} = \&killDelayed;
sub hoge { return; } my ($a, $b, $c) = (1, hoge(), 2); # $aには1が入るが、$bには2が入り、$cはundefとなる
perl -le 'print reverse "123"'
perl -le 'print scalar reverse "123"'
print (1+3)*2; # この結果は8ではなく4になる。つまり、以下のように認識されている。 # (print(1+3))*2; # エラーが出ないので、発見しづらい。要注意。
use IO::Handle; print STDOUT "hoge\n"; # 正しい。
my $fh = \*STDOUT; print $fh "fuge\n"; # 正しい。
my $this = { fh => \*STDOUT }; # print $this->{fh} "mage\n"; # コレは正しくない!!! # 正しくするには、次の二つのどちらかにする print {$this->{fh}} "mage\n"; # 間接オブジェクト記法 $this->{fh}->print("mage\n"); # 矢印オブジェクト記法
perlは、はまりポイントの多さは、rubyやpythonの比では無い、と、仕事で使っていて、常日頃から思っていた。
仕事では、まだperlを業務としては使ってはいるものの、「perlは、一生使っていける言語か?」という問いに対して、自分は少なくとも「yes」とは絶対に答えられない(※perl6は含まない、という事で)。
そして、言語とは、何年も使わなくてはマスターできないものである、という話であり、自分もそれを体感している。
それならば、将来には使わなくなるような言語は早く捨てて、将来に渡って自分が長く使いそうな言語を、さっさと使い始めた方がいいのではないか?
今のところ、「今後、一生使っていける言語のナンバーワン」は、自分の中では、Lispが群を抜いて一位。
なので、perlを捨てて、Lispで仕事をしたいと、常々思う。
しかし……。