CLI コマンドが、モジュールを兼ねるメリット
CLI コマンドをモジュールにするメリットは、そのコマンド内部の関数を 別の文脈・プログラムから実行できる(可能性が生まれる)ことです。
例えば他人の書いたスクリプト foo.pl
があって、
その中の関数 bar
だけを試しに実行してみたい、
と思ったことは無いですか?
# foo.pl の中身
while (<>) { ...; bar($., $_); ... }
sub bar {
my ($x, $y) = @_;
...
}
...
foo.pl
を他のプログラムからそのままロードした場合、
その中のトップレベルのコード(while (<>) など
)も実行されてしまいます。
なので、どうしても bar
だけを実行したいなら、bar に関係する部分だけを
手で抜き出す必要があるでしょう。これは大抵、困難な作業です。
それに対して、このプログラムが最初からモジュール Foo.pm
として
書かれていたらどうでしょう?
# Foo.pm の中身
sub run {
while (<>) { ...; bar($., $_); ... }
}
sub bar {
my ($x, $y) = @_;
...
}
run() unless caller;
1
この場合、モジュール Foo をロードして、 正しい引数を渡すだけで bar を 実行できる可能性が出てきます(もちろん、実際にはグローバル変数に依存する可能性もありますが)。
副次的に、bar だけを perlデバッガから呼び出したり、profile することも容易になります。