使用するディレクトリとファイルの上部に変数を設定する Perl スクリプトがあります。また、コマンドライン引数としていくつかの変数を設定する必要があります。例:
use Getopt::Long;
my ($mount_point, $sub_dir, $database_name, $database_schema);
# Populate variables from the command line:
GetOptions(
'mount_point=s' => \$mount_point,
'sub_dir=s' => \$sub_dir,
'database_name=s' => \$database_name,
'database_schema=s' => \$database_schema
);
# ... validation of required arguments here
################################################################################
# Directory variables
################################################################################
my $input_directory = "/${mount_point}/${sub_dir}/input";
my $output_directory = "/${mount_point}/${sub_dir}/output";
my $log_directory = "/${mount_point}/${sub_dir}/log";
my $database_directory = "/db/${database_name}";
my $database_scripts = "${database_directory}/scripts";
################################################################################
# File variables
################################################################################
my $input_file = "${input_dir}/input_file.dat";
my $output_file = "${output_dir}/output_file.dat";
# ... etc
これは、開発、テスト、および本番環境で正常に機能します。ただし、開発とテストのために、(デバッガーに入ることなく) 特定の変数を簡単にオーバーライドできるようにしようとしていました。(たとえば、input_file = "/tmp/my_input_file.dat" に設定したい場合)。私の考えは、GetOptions 関数を使用してこれを処理することでした。次のようなものです。
GetOptions(
'input_directory=s' => \$input_directory,
'output_directory=s' => \$output_directory,
'database_directory=s' => \$database_directory,
'log_directory=s' => \$log_directory,
'database_scripts=s' => \$database_scripts,
'input_file=s' => \$input_file,
'output_file=s' => \$output_file
);
GetOptions は 1 回しか呼び出せません (私の知る限り)。最初のスニピットの最初の 4 つの引数は必須で、すぐ上の最後の 7 つの引数はオプションです。理想的な状況は、最初のコード スニピットのようにデフォルトを設定し、コマンド ラインで引数が渡された場合に設定された設定を何らかの方法で上書きすることだと思います。すべてのオプションをハッシュに保存し、ハッシュにエントリが存在しない限り、各変数をデフォルト値で設定するときにそのハッシュを使用することを考えましたが、それは多くの追加ロジックを追加するようです. スクリプトの 2 つの異なる場所で GetOptions を呼び出す方法はありますか?
それが意味をなすかどうかはわかりません。
ありがとう!