2009-11-30 4 views
-1

펄 프로그램에서 문제를 해결하고 싶습니다.Perl 조건 연산자를 사용할 때이 구문 오류를 어떻게 해결합니까?

$parallel_on=='YES'? my $pid = $pm->start and next; :0; 

나는 이렇게 말하고 싶다. 하지만 나는 풀리지 않을거야. 어느 누구도이 문제를 해결할 수 있습니까?

+3

콜론에 부딪히는 세미콜론은 충분히 분명해야합니다. 다르게 말하면 : "': 0'이라고 쓰여진 성명서가 꽤 분명합니다. – innaM

답변

10
$parallel_on=='YES'? my $pid = $pm->start and next; :0; 

이 많은 잘못이있다. 첫째, 추가 세미콜론이 있습니다. 그것을 제거. 괄호의 진정한 상태로 묶어야합니다 것, 그래서 :이 시점에서

$parallel_on=='YES'? (my $pid = $pm->start and next) :0; 

그것을 컴파일합니다,하지만 아직도?

$parallel_on=='YES'? my $pid = $pm->start and next :0; 

다음으로, =and은보다 낮은 우선 순위가 작업. ==는 숫자 비교를위한 것이며 'YES'는 숫자로 시작하지 않는 문자열이며 숫자 값이 0이므로 거의 항상 참이됩니다. 사용 (. 예를 들어, 'NO'== 'YES'에 해당하는 0 == 0을 비교한다) EQ 대신 :

$parallel_on eq 'YES'? (my $pid = $pm->start and next) :0; 

다음 부분을, 나는 당신을 도울 방법을 잘 모르겠어요 나머지 코드는 어떻게 생겼는지 모르겠습니다. my $pid은 범위를 둘러싸는 블럭의 끝을 가진 새로운 어휘를 선언하지만, 할당하자 마자 next을 사용하여 블럭을 빠져 나갔다가 다시 입력하면 $ pid에 저장 한 값을 잃어 버리게됩니다. 블록 앞에 $ pid를 선언하고 싶을 것입니다.

my $pid; 
... 
    $parallel_on eq 'YES'? ($pid = $pm->start and next) :0; 

이제 상태가 거짓 일 때 용도가없는 0; 전화가 있습니다. 없애 버리십시오 :

조건이 거짓 일 때 $ pid에 할당하지 않으려면 어떻게해야합니까?

$pid = $parallel_on eq 'YES' ? $pm->start : 0 and next; 
4

? : 문법은 변수에 할당하기위한 것이지, 한줄의 if 문을 만들기위한 것이 아닙니다. 조건의 진정한 부분에서 두 문장을 사용하고 있기 때문에, 우리 모두에게 호의를 베풀고 실제 if 문을 사용하십시오. 청소기로 5 분 안에 그렇게하는 방법을 묻지 않아도됩니다.

my $pid = 0; 

if ($parallel_on eq 'YES') { 
    $pid = $pm->start; 
    next; 
} 
+1

이것이 더 깨끗한 접근 방법입니다. – Ram

+1

'- $ snarkiness'으로 설명 할 수 있습니다. –

관련 문제