直接起動出来ないようにする

Perl にて。
パッケージの中に関数だけを入れたファイルを誰かが直接実行しちゃった場合、無言で終了してしまうため、実行されたのかされてないのか分かりにくい。

caller() がスカラコンテキストで false を返した場合、直接実行されていることになるため、以下のようにファイル先頭に記述して置くと、メッセージを出すことが出来る。

#!/usr/bin/perl
package main;
unless (caller()) {
   warn "このファイルは直接実行出来ません。";
}
sub hi {
   warn "ご挨拶";
}
% ./main
このファイルは直接実行出来ません。 at ./main line 4.