2009-07-07 3 views
2

왜 Perl은 후위 비교에서 후위 루프를 연결시키지 않을까요?

$foo++ if $condition; 

그리고 이것은 괜찮습니다 :

$foo++ for (1..10); 

하지만 그렇지 않습니다 :

$foo++ if $condition for (1..10); 

일이 복잡하지 않다면 후자를 아주 쉽게 읽을 수 있습니다. 한 줄에 들어 맞습니다! 이 일을 할 수있는 방법이 있습니까? 아니면 제 삶과 함께해야합니까?

+0

제목에 Perl을 대문자로 사용 하시겠습니까? =) –

답변

12

문당 하나의 후위 작업 만 할 수 있습니다. 하지만 do 블록을 사용하여 원하는대로 할 수 있습니다 (예 :).

do { $foo++ if $condition } for (1..10); 

개인적으로이 스타일은 매우 혼란스럽고 읽기가 어렵습니다. 내가 너라면 그걸 피할거야. 그 모든 문제에 빠지면

for(1..10) { $foo++ if $condition } 

IMHO라고 말할 수 있습니다.

+0

정말 나에게 모두 똑같습니다. 나는 그 곳의 철자가 어디에 있는지를 알 수 없었고 설명을 찾고있었습니다. 감사! – wes

3

and 인 경우 적합한 그러나

$condition and $foo++ for 1 .. 10; 

을 말할 수 있도록,와 같은 효과를 얻을 수있는 또 다른 방법은, 그는 격려 방법이 아닙니다.

2

필자가 이해 하듯이, 이것은 사람들이 읽기 어렵게 작성하거나 올바른 코드를 작성하는 것을 피하기 위해 perl 초창기의 의도적 인 설계 결정이었습니다. Perl 6은 적어도 일부 조합 (if/for 및 for/if 일 수도 있고 for/for 일 수도 있고 if/if 일 수도 있음)을 허용 할 것이며 Perl 5가 어떤 시점에서이를 따라 올 것이라고 믿습니다.

업데이트 : Perl 6은 루프 내부에 조건부를 허용합니다 (예 : EXPR if EXPR for LIST). 더 이상 괄호가 필요하지 않습니다 (예 : (EXPR for LIST) if EXPR).

+0

때때로 Larry Wall과 공동의 마음에 마지막으로 읽을 수없는 코드가 없다고 생각합니다. D Perl의 기쁨 중 하나인데, 상황에 가장 적합한 것을 할 수있는 자유입니다. 나 자신을 망칠 수있는 기회를 제공하더라도, 나는 더 많은 자유를 누리고있다. – wes