ラクダ本読んで初めて知りました。
use base は $VERSION を見てrequireするかを決めている
% perl -e 'use base "hoge";' Base class package "hoge" is empty. (Perhaps you need to 'use' the module which defines that package first.) at -e line 1BEGIN failed--compilation aborted at -e line 1.
ですが、
% perl -e '$hoge::VERSION = 1; use base "hoge";'
%
です。
use base は$VERSION を勝手にセットする
# Super.pm package Super; 1; # test.pl print "Before use base: ", $Super::VERSION, "?n"; eval qq/ use base 'Super'; /; print "After use base: ", $Super::VERSION, "?n"; # [実行結果] # % perl test.pl # Before use base: # After use base: -1, set by base.pm
まとめると、use base でファイルが存在しないクラスを親にしたい場合は、事前に $VERSION変数 をセットしておくと吉です。
2010-03-22 追記
"... is empty." なエラーを出す前に base.pm は %{"$base\::"} も覗いていますので、$VERSION に限らず名前空間に何らかのシンボルさえ置いていればエラーにはならないです。ただし、 $VERSION で require をかけに行くかを判定しているのは事実なので、定義しておいた方がベターです。
以上、 base-2.14 で確認。