2014-12-21 3 views
1

Я новичок в Perl, и я пытаюсь проверить, начинаются ли мои 2 аргументы с «-» или «-». Мой код:Как проверить правильность аргументов с помощью Perl?

if ($ARGV[0] ~= /^-*/ || $ARGV[1] ~= /^-*/) { 

Но когда аргументы «abc abc», оно все еще передает условие.

Заранее спасибо.

+0

Как совет: используйте модуль perldoc.perl.org/Getopt/Long.html. Потребуется еще некоторое время, чтобы узнать, как использовать их в первый раз, но тогда это сэкономит вам много хлопот ... :-) – MarcoS

+2

Действительно, загляните в [Getopt :: Long] (http: /search.cpan.org/perldoc?Getopt::Long). Это проще в использовании, чем даже тривиальное переосмысление колеса. – ikegami

ответ

2

Прежде всего, binding operator является =~, а не ~=. Это легко запомнить, поскольку у него есть аналог - !~ (означает «не соответствует»). Но это простая опечатка.

Что более важно, однако, это сам подход: если вы хотите соответствовать '-' и '--', шаблон должен быть записан как /^--?/. Однако неясно, действительно ли аргумент '---abc' или нет. Если нет, то регулярное выражение должно выглядеть следующим образом:

/^--?[^-]+$/ 

... в противном случае это достаточно просто проверить первый символ соответствующих паров против «-», и с использованием регулярных выражений, очевидно, является излишним. Например:

if (substr($ARGV[0], 0, 1) eq '-' || substr($ARGV[1], 0, 1) eq '-') { 
    # invalid params detected 
} 

Тем не менее, как вы пытались осуществить его, оно должно было быть записано как /^-+/, не /^-*/. Последний соответствует любому количеству дефисов в начале строки - в том числе 0 дефисов. Вот почему строка abc прошла проверку. Фактически, любая строка прошла бы проверку.

+0

Я думаю || это нормально, потому что я проверяю, начинается ли какой-либо из двух аргументов - и если это произойдет, я печатаю предупреждение и завершение (я хочу только аргументы без - или -). Теперь у меня есть что-то вроде этого: if ($ ARGV [0] ~ =/^ -?/|| $ ARGV [1] ~ =/^ -? /) {, Но компилятор бросает синтаксическую ошибку beetwen] ~ (синтаксис ошибка в ./translate.pl строке 26, рядом с "] ~") – patrykf

+3

Потому что это должно быть '= ~', а не '~ ='. – raina77ow