2017-02-04 15 views
-1

У меня есть входное значение ARGV из сценария bash, который либо (да), либо (нет). Мне нужно (да) или (нет) равное числовому значению (1) или (0), а выход на основе этого значения ARGV является числовым значением.Выбор переменных на основе ARGV

Моя попытка получить что-то вроде этого, чтобы работать: script.pl да &

my $VAR1=   $ARGV[0]; 
my $yes=1; 
my $no=0; 
print $VAR1; 

Вывод на печать: 1 (а не слово да)

К сожалению, мой пример кажется явно глупо, потому что $ VAR1, очевидно, все, что я использовал в качестве значения ARG. Так что я хочу сделать, это взять ARGV и проверить его на список предустановленных значений, а затем вывести значение этого пресета.

Спасибо,

** Я Perl нуб. Мое извинение, если я не объясню это правильно.

+1

Вы можете попробовать использовать хэш, например: 'perl -E '% input_map = (yes => 1, no => 0); скажем $ input_map {+ shift} 'yes' –

+0

Perl -E запускает его из командной строки. Как я могу написать это в своем скрипте как ARGV? Переменная передается из другого скрипта, и я делаю что-то более сложное, просто да или нет в perl-скрипте. Я просто использую это как пример из соображений безопасности. Если я знаю, как взять значение ARGV и проверить его на список предустановленных значений, значит, выход является предустановленным значением, тогда мне хорошо идти оттуда. – Alby

+0

Привет, Alby. «Сдвиг» в моем примере - это ярлык для 'shift @ ARGV' –

ответ

3

Итак, вы хотите найти одно значение на основе другого. Для этого хеш обычно является инструментом для использования.

my %yes_no_to_bool = (
    yes => 1, 
    no => 0, 
); 

@ARGV == 1 
    or die("usage\n"); 

my ($arg) = @ARGV; 

exists($yes_no_to_bool{$arg}) 
    or die("usage\n"); 

my $bool = $yes_no_to_bool{$arg};