第5章 リファレンス
わかりやすかったので覚書きはなし。
40項 まとめて大量のデバッグをしない
何事も「鵜呑み」にしてはならない
どうにもうまくいかないバグに対したら、トイレに行くとか、休憩をとるとか、体操をするとか、帰って明日やるとか、視点の変換が大切ですよね。
第7章 パッケージとモジュールの使い方
第8章 パッケージとモジュールの書き方
ここらへんは今はいいや。必要になったときに。
50項 Perlのメソッド継承を理解しよう
@ISAで継承ですか。でも@ISAって、strictだと怒られるな。
サブルーチン名が被ってるだけでオーバーライドになるのか。シグネチャの違い、というかシグネチャがないから当たり前か。
AUTOLOADとUNIVERSAL
AUTOLOADはメソッドコールの構文*1で存在しないサブルーチンが呼ばれたときに拾ってくれるのか。
package Parent; sub new { bless {}, shift } sub AUTOLOAD { print "auto $AUTOLOAD\n"; print "@_\n"; } sub DESTROY { print 'DESTROYERRRRRRRRRR'; } package UNIVERSAL; sub AUTOLOAD { print "universal autoload $AUTOLOAD\n"; } package Child; @ISA = qw(Parent); package main; my $child = new Child; $child->foo( 'bar', 'baz' );
auto Child::foo Child=HASH(0x16252a8) bar baz DESTROYERRRRRRRRRR
きっちりDESTROYされるとUNIVERSALのは働かないのか。
でも、$AUTOLOADもstrictだと怒られるな。どうするんだろ。実際の使ってる例をみればいいのか。
51項 データを明示的に継承する
package Parent; sub new { my $pkg = shift; bless { foo => 1, bar => 'abc', @_ }, $pkg; }
引数でハッシュで渡すようにしとけば、デフォルト値を使えるんだよな。
package Child; @ISA = qw( Parent ); sub new { my $pkg = shift; SUPER::new $pkg { foo => 1, bar => 'abc', @_ }; }
これでデータの継承もできるのか。んー、違和感を感じるのは理解しきれてないからかな。
60項 粋な1行野郎ども
あるものと別のものをマッチさせる
/^(?=.*?this)(?=.*?that)/
リストからエントリの重複を排除する
my @uniq = sort keys %{ { map { $_, 1 } @list } };
mapでキーに要素を持ったハッシュを作って直ぐにキーを返してる。リストの順番は保持されないけどね。
*1:オブジェクト->サブルーチン みたいな