저는 Perl을 처음 사용하고 제 2 인자가 "-"또는 "-"로 시작하는지 확인하려고합니다. 내 코드 :Perl을 사용하여 인수가 올바른지 확인하는 방법은 무엇입니까?
if ($ARGV[0] ~= /^-*/ || $ARGV[1] ~= /^-*/) {
그러나 인수가 "abc abc"인 경우에도 조건을 전달합니다.
미리 감사드립니다.
저는 Perl을 처음 사용하고 제 2 인자가 "-"또는 "-"로 시작하는지 확인하려고합니다. 내 코드 :Perl을 사용하여 인수가 올바른지 확인하는 방법은 무엇입니까?
if ($ARGV[0] ~= /^-*/ || $ARGV[1] ~= /^-*/) {
그러나 인수가 "abc abc"인 경우에도 조건을 전달합니다.
미리 감사드립니다.
우선, binding operator은 =~
이고, ~=
이 아니다. !~
(의미가 '일치하지 않음')과 일치하므로 기억하기 쉽습니다. 그러나 그것은 단순한 오타입니다.
그러나 더 중요한 것은 접근 자체입니다. '-'
및 '--'
과 일치 시키려면 패턴을 /^--?/
으로 작성해야합니다. 그러나 '---abc'
을 유효한 인수로 간주할지 여부는 명확하지 않습니다. 그렇지 않은 경우, 정규 표현식은 다음과 같이한다 :
/^--?[^-]+$/
을 ... 그렇지 않으면 단지에 대한 대응 PARAM의 첫 번째 문자 확인 충분 '-'를, 그리고 정규식을 사용하는 것은 분명 과잉이다.
if (substr($ARGV[0], 0, 1) eq '-' || substr($ARGV[1], 0, 1) eq '-') {
# invalid params detected
}
그럼에도 불구하고, 당신이 그것을 구현하려고했던 방법은, 그것은 /^-+/
하지 /^-*/
로 작성되어 있어야합니다 예를 들면 다음과 같습니다. 마지막 문자는 의 경우 문자열 시작 부분의 하이픈 수 (0 하이픈 포함)와 일치합니다. 그래서 abc
문자열이 수표를 통과 한 것입니다. 사실, 어떤 문자열이 수표를 통과했을 것입니다.
조언대로 : perldoc.perl.org/Getopt/Long.html 모듈을 사용하십시오. 처음 사용하는 방법을 배우는 데 좀 더 시간이 걸리지 만 많은 번거 로움을 덜어줍니다. :-) – MarcoS
실제로 Getopt :: Long (http : /search.cpan.org/perldoc?Getopt::Long). 휠을 재발 명하는 것보다 사용하기가 더 쉽습니다. – ikegami