useの話かも
「use」はモジュールをインポートするものですが、
package Foo; use strict; use warnings; sub new {}; sub foo {}; 1;
上記モジュールを利用するスクリプト
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use lib qw(.) use Foo; print Dumper \%{Foo:}; exit;
出力結果
$VAR1 = { 'BEGIN' => *Foo::BEGIN, 'foo' => *Foo::foo, 'new' => *Foo::new, 'import' => *Foo::import };
これは、Fooモジュールのシンボルテーブルの中身であってFooモジュールで定義されている変数や関数になるわけだが、「BEGIN」は良いとして、「import」ってなんぞや?そんなものは書いた覚えがない、勝手に作られたのかな〜というわけなんだが、Perlの仕様で「use」した場合、自動的に「import」メソッドを呼び出すとの事。
ただし〜モジュールを呼び出す側で、ある事をするとですね。面白い事になる。
#!/usr/bin/perl use strict; use warnings; use Data::Dumper; use lib qw(.) use Foo (); print Dumper \%{Foo:}; exit;
出力結果
$VAR1 = { 'BEGIN' => *Foo::BEGIN, 'foo' => *Foo::foo, 'new' => *Foo::new, };
「import」が消えた!「use」する際にモジュールに「()」を書いて明示的にすると「import」メソッドが呼ばれません。面白いね。よく入門書を見たりすると、モジュールごとに「()」があったりなかったりしてあるが、特に深く考えなかった。明示的に「()」を書いて「import」メソッドを呼ばないようにするって事はメモリの節約になるから、そういった細かなところまで気を配っているんですね。面白いよ。ではでは