2009-08-04 2 views
1

왜 작동하지 않습니까?Perl에서 string eval을 사용하려고 할 때 구문 오류가 발생하는 이유는 무엇입니까?

eval "$response = $ua->request($r);" 
print "[email protected]"; 

준다 : 당신의 따옴표 문자열이 변수가 장소에 확대되고 함께 잘 이동하지 않을 보간 될 수 있으므로 그것은 작동하지 않습니다

syntax error at (eval 8) line 1, near "=" 
+1

정말로 여기 eval을 사용해야합니까? – innaM

+0

@ 만니; 아마도 그렇지 않을 것입니다 - 아마도 학습 운동 일 것입니다. –

+2

어떤면에서든 그것은 분명히 학습 운동입니다. 그러나 당신이 잘못된 것을 배우지 않는 것이 중요합니다. – innaM

답변

15

. 그리고 평가판 밖에서는 세미콜론이 필요하지 않습니다. 다음과 같이 작은 따옴표를 사용해보십시오 :

eval '$response = $ua->request($r)'; 
+3

중괄호를 사용하지 않는 이유는 무엇입니까? – innaM

+2

대답하는 동안, 이전에 언급 된 사람이 언급했듯이, 아래에 언급 된 블록 증거에 의해 달성 될 수있는 실마리가 의심 스럽다는 것을 알아야합니다. 실망스러운 증거물 사용을지지하기 전에 답변을 수정하십시오. –

+2

브래드 길버트 (Brad Gilbert)가 완벽하게 좋은 대안을 가지고 있기 때문에 나는 내 대답을 수정해야한다고 생각하지 않지만, 나는 강렬한 증거를 옹호하지 않는다고 말하고 싶다. 길버트 (Gilbert)가 전술적 결함을 언급 한 OP 코드의 즉각적인 구문상의 결함을 바로 잡으려고했습니다. – chaos

22

더 나은 질문은 블록 평가 대신 문자열 평가를 사용하는 이유입니다.

eval { $response = $ua->request($r); } 
print "[email protected]"; 
+2

"eval 또는 do"구문을 사용하여 예외를 잡으십시오. eval {blah; 1} 또는 do {경고 "Eval failed : $ @"}; – daotoad

2

첫 번째 장소에서 eval을 사용하는 이유는 무엇입니까? 나는 당신이 LWP::UserAgent을 사용하고 있다고 의심하고 당신 자신의 요청 객체를 구현하지 않는 한 'request` 메쏘드는 죽을 것 같지 않습니다.

따라서, 왜 단순히 사용

$response = $ua->request($r); 

은?

+0

때문에 해당 코드 줄을 죽어 가고 https 요청을 실행할 때 내부 서버 오류가 발생합니다. – user105033

+0

시안이 자신의 매력적인 방식으로 말하고자하는 것은 : 죽어가는 코드를 평가판에 배치해도 코드가 작동하지 않습니다. – innaM

+1

@Manni 빠르게이 글을 읽는 사람에게이 스레드를 통해 온 사람은 https 요청으로 죽어가는 것을 피하는 방법은 LWP와 함께 제공되는 README.SSL 문서를 읽는 것입니다. http://stackoverflow.com/questions/1228572/other-way-to-send-https-request-in-perl-without-lwpuseragent-and-httprequest/1228730#1228730도 참조하십시오. –

관련 문제