У меня есть скрипт 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 можно вызывать только один раз (насколько я знаю). Первые 4 аргумента в моем первом фрагменте являются обязательными, последние 7, приведенные выше, являются необязательными. Я думаю, что идеальной ситуацией было бы установить значения по умолчанию, как в моем первом фрагменте кода, а затем каким-то образом переопределить любой из них, которые были установлены, если аргументы были переданы в командной строке. Я думал о том, чтобы сохранить все мои параметры в хэше, а затем использовать этот хэш при настройке каждой переменной со значением по умолчанию, если в хэше не существует записи, но это, кажется, добавляет много дополнительной логики. Есть ли способ вызвать GetOptions в двух разных местах скрипта?
Не уверен, имеет ли это смысл.
Спасибо!