Я перевожу сценарий оболочки в сценарий Perl, который использует Getopt::Long, и я хочу сохранить совместимость с приведенным ниже случаем, когда, если единственным аргументом сценария является один файл, этот файл используется как файл конфигурации, в то время как обычно нужно получить параметры в GetoptLong.
if [[ $# -eq 1 && -f $1 ]];
then
echo "Using config file $1"
[...]
else
if [ $# -lt 2 ]; then usage "INCORRECT NUMBER OF PARAMETERS"; fi
while getopts ":a:b:c:d:ef" opt;
do
[...]
Один из вариантов — сохранить if/else
в Perl-скрипте следующим образом:
if (1 == @ARGV && -f $ARGV[0]) {
# use this config file
config_file_method($ARGV[0]);
} else {
# use GetOptions
GetOptions(
'a|foo:s' => \$foo,
'b|bar:s' => \bar,
[...]
);
}
Но мне интересно, можно ли этот особый случай включить в функцию GetOptions с некоторой магией:
GetOptions(
'if only one element in @ARGV' => 'call config_file_method($ARGV[0])',
'a|foo:s' => \$foo,
'b|bar:s' => \bar,
[...]
);
Есть идеи?
==
сравнивает числа. Числа являются скалярами, поэтому==
накладывает скалярный контекст на свои аргументы. Каждый экземплярscalar
, который у вас есть, бесполезен. - person ikegami   schedule 26.09.2013