2014-12-21 8 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'을 유효한 인수로 간주할지 여부는 명확하지 않습니다. 그렇지 않은 경우, 정규 표현식은 다음과 같이한다 :

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

을 ... 그렇지 않으면 단지에 대한 대응 PARAM의 첫 번째 문자 확인 충분 '-'를, 그리고 정규식을 사용하는 것은 분명 과잉이다.

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

그럼에도 불구하고, 당신이 그것을 구현하려고했던 방법은, 그것은 /^-+/하지 /^-*/로 작성되어 있어야합니다 예를 들면 다음과 같습니다. 마지막 문자는 의 경우 문자열 시작 부분의 하이픈 수 (0 하이픈 포함)와 일치합니다. 그래서 abc 문자열이 수표를 통과 한 것입니다. 사실, 어떤 문자열이 수표를 통과했을 것입니다.

+0

내가 생각하기에 || 2 개의 인수 중 하나라도 시작하는지 확인하기 때문에 ok입니다. 경고 및 종료를 인쇄 할 경우 (또는 인수없이 원하는 경우에만). 지금은 이런 식으로 뭔가 : if ($ ARGV [0] ~ =/^ -?/|| $ ARGV [1] ~ =/^ -? /) {그러나 컴파일러가 구문 오류 beetwen] throw합니다 ~ (구문 ./translate.pl line 26, near "~ ~") – patrykf

+3

'= ~'이어야하고'~ ='이 아니기 때문에. – raina77ow

관련 문제