3

コマンドラインから実行するメインプログラム mytool.pl があります。いくつかの補助スクリプト special1.pl、special2.pl などがあります。これらにはそれぞれ、2 つのサブルーチンとハッシュが含まれており、すべてのスクリプトで同じ名前が付けられています。これらの名前が MySpecialFunction()、AnotherSpecialFunction()、および %SpecialData であるとします。

コマンド ライン オプションに従って、mytool に特別な *.pl ファイルの 1 つだけの内容を含める/使用する/インポートすることを希望します。たとえば、ユーザーは次のようにします。

bash> perl mytool.pl  --specialcase=5

mytools は special5.pl の MySpecialFunction() を使用し、他のすべての special*.pl ファイルを無視します。

これは可能で、どのように行うのですか?

使用する特殊ファイルの選択は実行時に行われることに注意することが重要であるため、mytool.pl の先頭に「使用」を追加することはおそらく正しいことではありません。

注: 私は長年の C プログラマーであり、perl の専門家ではありません。私は明らかなことを尋ねているかもしれません。これは、わずか 1 か月で粉々になる 1 回限りのプロジェクトです。mytool.pl も special?.pl (perl 自体も) は、この短いプロジェクトが終了した後は興味を引くものではありません。したがって、手の込んだソリューションや、深い魔法の学習が必要なソリューションには関心がありません。クイックとダーティが好ましい。Perl のモジュール メカニズムは、これにはやり過ぎだと思いますが、代替手段が何かはわかりません。

4

2 に答える 2

2

ハッシュまたは配列を使用して値specialcase.plファイルにマップし、必要に応じて要求または実行できます。

#!/usr/bin/env perl

use strict; use warnings;

my @handlers = qw(one.pl two.pl);

my ($case) = @ARGV;
$case = 0 unless defined $case;

# check that $case is within range

do $handlers[$case];

print special_function(), "\n";
于 2012-04-11T22:34:56.183 に答える
1

モジュールの場合use、Perl は単にブロックrequire内のモジュールですBEGIN(そしてモジュールのエクスポートされたアイテムをインポートします)。実行時にロードするスクリプトを変更したいので、自分自身を呼び出しrequireます。

if ($special_case_1) {
  require 'special1.pl';
  # and go about your business
}

これは、いつ対を使用するかについての良いリファレンスです。userequire

于 2012-04-11T23:17:55.873 に答える