警告
この本文は個人の感想しか含まれておりません。仕事の都合上よくrubyでスクリプトを書く,だがそれ以上にレガシーなツールのperlスクリプトを良く読む。
個人的にperlはものすごく嫌いな言語で嫌い過ぎて今まで勉強すら拒んできた。
なんで嫌いなのかは明らかで、直感的に読めないからだ。初見だとshiftってなんだ、bless?eval?というかこの関数の引数どうなってるの?
とかまぁいろいろ。
とはいえ、レガシーなツールをたくさん持っている今の部署でこの先生き残るにはperlを勉強しないとつらいので、個人的にperlの気持ち悪い部分にフォーカスしてここに書き残したい。
内容は初歩の初歩で自分のモチベーションや継続学習のためのかきのこしているため、あんまり役に立つ情報はないと先に記載しておく。
後悪い部分ではない、私が気持ち悪いと思った部分なのでという言い訳だけ先にしておきます。
インスタンスメソッド
package Class1;
# コンストラクタ
sub new {
my %self;
my $class = shift;
$self->{value} = 0;
return bless $self, $class;
}
sub test1 {
my $self = shift;
print "hello world\n";
}
sub test2 {
my $self = shift;
print "good bye world\n";
}
1;
このクラスの定義の仕方も初見あまりよくわからなかったがそれはまぁいい。
見ての通りhello worldを出力するtest1,good bye worldを出力するtest2のインスタンス変数が定義されているClass1というpmファイルがある。
このインスタンスメソッドってこんな風に実行できるんだね。
use Class1;
sub test {
my ($obj, $method) = @_;
$obj->$method;
}
my $obj = Class1->new;
test($obj, 'test1');
test($obj, 'test2');
出力は
hello world
good bye world
個人的にこういう書き方ができちゃうと可読性が大変つらい感じになっちゃうような気がするのだけれどなれればそうでもないのだろうか?
Cの関数ポインタとかも同種の読みづらさを感じる。
割と使い道を思いつく分他の言語でもできそうな気がするけど、testしんどそうなのであんまりやりたくないなぁ…