2012-11-24 6 views
2

Perl이 단락되어 이상한 결과가 발생했습니다. 즉, &&입니다.회로가 단락되고 잘못된 결과가 나타 납니까?

숫자의 목록으로 특정 숫자를 나눌 수있는 Project Euler 문제를 해결하려고합니다.

$b=42; 

if($b%21==0 && b%2==0 && b%5==2){print "Why not?"}; 

내가 볼 수있는 한 "Why not"을 인쇄해야하지만 침묵을 유지해야합니다.

$b=42; 

if($b%21==0 && b%2==0 && b%5==0){print "WTF?"}; 

조용하게 유지해야하지만 "WTF?"을 인쇄해야합니다.

무엇을 제공합니까?

+4

항상 '사용 엄격'이라고 쓰는 이유 – PSIAlt

답변

10

을 :) 발견했다. 이 "Why not?"하지만 인쇄 "WTF "인쇄되지 않는 정확한 이유는 이것이다 :. 당신이 $ 기호없이 b이 (힘의 use strict;없이), 펄 문자열 "b"b 취급 줄 때 당신은에 운영자 %을 적용 그런 때 그것은 %이 수치 연산자이기 때문에 Perl은 문자열 을보고 숫자로 시작하는지 확인합니다. 그렇지 않으면 Perl은 숫자 값 을 0으로 취한 다음 mod (%) 연산을 적용합니다. 0 % 5는 0이 아니고 2가 아니므로 WTF이 인쇄되고 "Why not?"

+0

모든 답변이 감사하며 이유를 설명하는대로 허용했습니다. –

8

항상 use strictuse warnings을 사용하십시오.

당신이 사용하는 마지막 경고로 표시됩니다 두 bareword는 같은 b's, - 당신은 변경해야 "Unquoted string "b" may clash with future reserved word"

당신의 if에 -

if($b%21==0 && $b%2==0 && $b%5==2){print "Why not?"}; 

과 : -

if($b%21==0 && $b%2==0 && $b%5==0){print "WTF?"}; 

은 예상되는 결과를 제공합니다.

+0

Embarrasing. Wh y 오류 메시지가 없습니까? –

+4

@TheUnfunCat '엄격한 사용'과 '경고 사용'을 사용하면됩니다. –

+0

@ TheUnfunCat .. 편집 된 게시물보기 –

2

경우 ($ 21 %의 B == 0 & & $ B 형 (2) == 0 % & & $ B 형 5 % == 2) {프린트 "왜?"}; 여기

작품, 당신은 $를 잊었지만 apearntly 당신은 이미 Rohit이 솔루션은 b 전에 $을 추가하는 것입니다 대답으로는

관련 문제