2013-05-01 2 views
0

У меня возникли трудности с выяснением того, как проверять ввод пользователя, который соответствует строке, за которой следуют пользовательские аргументы, всегда идет в оператор my else.Если строка соответствия оператора и аргументы пользователя

elsif ($user_input eq "sort by" && $ARGV[2]) 
    { 
      print"this is working"; 
      #use arguments to sort by user command 
      print $ARGV[2], "\n\n\n"; 

    } 
    else #user validation 
    { 
      print "Error, please re-enter command \n\n"; 
      &Menu; 
    }` 
+1

Вы забывая 'chomp' пользовательского ввода? – squiguy

+1

Если вы хотите склеить строки вместе, используйте оператор конкатенации '.', как в' $ user_input eq "sort by". $ ARGV [2] '. (Обратите внимание на пробел после 'by'.) – michaelb958

+0

Пожалуйста, сообщите нам, какой ввод вы пробовали, что дает неожиданные результаты и как заполняется' $ user_input'. – darch

ответ

0

Я не уверен, что я понимаю ваш вопрос, то, что вы хотите, чтобы проверить проверки строки и аргументы пользователей независимо друг от друга. Вы используете короткое замыкание и операцию «& &», поэтому в тот момент, когда он встречает первое ложное, он перестает проверять остальную часть выражения. Это вам поможет?

+0

Прошу прощения за то, что вы расплывчаты. То, что мне нужно для инструкции if, соответствует совпадению ввода с пользователем «sort by x», где x является аргументом пользователя и может быть чем угодно. – 2013-05-01 05:06:29

+0

вы можете использовать оператор конкатенации строк, ".", Попробуйте это elsif ($ user_input eq "sort by". $ ARGV [2]) – Prashant

0

Изменение:

elsif ($user_input eq "sort by" && $ARGV[2]) 

по:

elsif(defined($ARGV[2]) and ($user_input eq "sort by $ARGV[2]")) 
1

Вы можете использовать Params :: Validate пакет, доступный на CPAN. Цитирование примера на странице

validate(
     @_, 
     { foo => { regex => qr/^\d+$/ } } 
    ); 

Вы можете использовать это, чтобы проверить входной аргумент против конкретного регулярного выражения. Существуют и другие полезные проверки. Params :: Validate может сделать для вас.

Params::Validate

1
elsif (my ($sort_by_what) = $user_input =~ /^sort by (\w+)\z/) { 
    print "ok, I'll sort by $sort_by_what\n"; 
} 

(использовать что-то другое, чем \ W +, чтобы соответствовать Вашему "х", если необходимо)

Смежные вопросы