2011-03-18 2 views
2

나는 어떤 이유에서이 스크립트를 가지고 항상 -1을 반환합니다. 내가 원하는 무엇. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

#!/usr/bin/perl 

use strict; 
use warnings; 

use Test::More tests => 4; 

is(scrub(''), '-1'); 
is(scrub('~'), '-1'); 
is(scrub('undef'), '-1'); 
is(scrub('a'), 'a'); 

sub scrub { 
    my $a = shift; 

    if ($a =~ m/~|undef|/) { 
     return -1; 
    } 

    return $a; 
} 

~ 또는 펄의 undef 또는 빈 문자열``인수로 제공하는 경우에만 -1을 반환한다는 것입니다.

누구든지 잘못된 것을 볼 수 있습니까?

업데이트 : 답글을 기반으로이 솔기가 올바른 방법입니다.

sub scrub { 
    my $a = shift; 

    return ($a =~ m/^(~|undef|^$)$/) ? -1 : $a; 
} 
+0

/undef/정의되지 않은 값이 아닌 "u", "n", "d", "e", "f"문자열을 검사합니다. 테스트는'is (script (undef), -1); – ikegami

답변

4

정규 표현식이이 작업에 적합한 도구가 아닙니다. 문자열 동등성을 테스트하기 위해 eq 연산자를 사용했고, undef를 테스트하기 위해 defined() 연산자를 사용했습니다.

if ($a eq '' or $a eq '~' or not defined $a) { 
    return -1; 
} 

BTW, $의 4 번째 값이 리턴이 -1 여기에, $ a는 이미 -1 즉 때.

관련 문제