2009-11-05 5 views
3

는 내가 같은 것을 할 수 있습니다 참조 :Perl에서 인쇄 한 직후 리터럴리스트 슬라이스를 사용할 수없는 이유는 무엇입니까?

print STDOUT (split /\./, 'www.stackoverflow.com')[1]; 

와 "유래"가 인쇄되어 있습니다. 그러나,이 :

print +(split /\./, 'www.stackoverflow.com')[1]; 

은 동일하지 않습니다,이 :

print (split /\./, 'www.stackoverflow.com')[1]; 

에 구문 오류가 있습니다. 그럼 여기서 정확히 무슨 일이 일어나고있는거야? 나는 항상 어떤 상황에서도 아무 일도하지 않는 단항 더하기 기호를 이해했습니다. 그리고 "FILEHANDLE EXPR 인쇄"가 작동한다면, "print EXPR"이 항상 똑같이 작동한다고 상상했을 것입니다. 어떤 통찰력?

+0

사실에 대한 질문을 할 질문의 텍스트를 변경하세요 에. 이것은 질문을 다른 사람들에게 더 유용하게 만듭니다. – darch

+0

제안 사항이 있으시면 기꺼이 검토해 드리겠습니다. –

+0

이것은 perlfaq에있을 자격이 있습니다. 나는 그것이 이미 거기에 있다고 생각했다. : –

답변

16

경고가 활성화되어 있지 않습니다. print(...)[1]의 경우 괄호 세트는 함수 구문의 일부로 간주됩니다.

에서
 
print (...) interpreted as function at C:\Temp\t.pl line 4. 

, perldoc -f print :

또한

당신이 인쇄에 인수를 종료 할 수있는 해당 오른쪽 괄호를하지 않으려면 왼쪽 괄호로 인쇄 키워드를 따라하지 않도록주의 — +를 끼어이나 넣어 모든 인수를 둘러싼 괄호

또한보십시오 print에 대한 Why aren't newlines being printed in this Perl code?

+9

+1 OP의'print ('의 공간은 그 사람을 던지고 있습니다.) 공백은 의미심장 한 것으로 보이더라도 의미가 없습니다. 이것은 파이썬이 아닙니다. –

+3

이 경고는 모든 listop에도 적용됩니다 ! '인쇄'는 괄호를 벗어날 확률이 가장 높고 우연히 괄호를 첫 번째 인수에 추가 할 가능성이 가장 큰 것입니다. – hobbs

8

perldoc이 덩어리 포함 : 또한

로 인쇄 키워드를 따라하지 않도록주의를 왼쪽 괄호는 종료 해당 권리 괄호를하지 않으려면 print에 대한 인수는 "+"를 삽입하거나 모든 인수를 괄호로 묶습니다.

print은 항상 LIST 컨텍스트에서 인수를 평가합니다.

print (split /\./, 'www.stackoverflow.com') 

괜찮라고합니다. 당신이

print (split /\./, 'www.stackoverflow.com')[0] 

말할 때 첫 (을보고, 그것을 닫는 )을 볼 때 완전하고 목록을 고려 후에 그러나 파서는 LIST를 기대하고있다. [0]은 아무것도 작동하지 않는 것으로 해석되므로 구문 오류가 발생합니다.

print "abc","def";  # prints "abcdef" 
print ("abc","def");  # prints "abcdef" 
print ("abc"), "def"; # prints "abc" 


첫 번째 인수가 같은 방식으로 행동으로 목록을 취할 수

다른 펄 기능 : 무슨

warn ($message),"\n" # \n not passed to warn, line # info not suppressed 

system ("echo"),"x" # not same as system("echo","x") or system "echo","x" 
         # or system(("echo"),"x") 
관련 문제