2011-02-12 11 views
0

왜 내 서브 루틴에서 이것을 사용할 수 없습니까?

$sql="SELECT * FROM table WHERE name = ? "; 
&checkDB($sql , "bob" , "while" ); 

sub checkDB(){ 

my $sth=$dbh->prepare($_[0]) or warn "$DBI::errstr"; 
$sth->execute($_[1]) or warn "$DBI::errstr"; 

print $_[2] . "\n"; # this works 
    $_[2] (my @rows= $sth -> fetchrow()) { # this doesn't work 
    blah, blah, blah 
    } 


} 

내 SQL 문 'bob'과 'while'또는 'unless'변수를 서브 루틴에 전달합니다. 내 서브 루틴은 "while"변수를 넘겨 주지만 ("while \ n"동안) 인쇄 할 수는 있지만 fetchrows에 사용하지는 않습니다. 내가 뭘 잘못하고 있죠?

내 정확한 오류는 "script.pl 근처에서 구문 오류가 발생했습니다." ""... $ _ [2]를 실제 단어로 "while"

+1

Perl은 이와 같은 키워드 대체를 수행하지 않기 때문에. 세 번째 매개 변수는 정확히 무엇을 나타낼 것인가? (while을 제외하고)? – BoltClock

답변

1

"하면서 Perl에서 키워드 대신 변수를 사용하십시오. 그런 구조를 실제로 수행해야한다면 eval을 보아라. 그러면 임의의 문자열을 perl 코드로 실행할 수있다.

1

나는 여기서 당신이 필요로하는 것이 eval이라고 생각하지만, 여기에는 사악한 것이 있습니다. 당신은 분명히 그 코드의 어떤 것도 오염되지 않았 음을 확신하고 싶다. 나는 아마도 당신이 왜 이것을하고 싶어하는지 그리고 더 좋은 방법 (예를 들어 두 가지 다른 기능)이 없다면 매우 열심히 생각해야한다고 생각합니다. 우리는 프로그래머들이 게으르기를 원하지만 진실은 위험하다는 것을 알고 있습니다.

+0

아마도 "while"while 루프 일 때 문자열을 테스트 할 수 있습니다. until 루프를 수행 할 경우 "until"입니다. 반복되는 코드가 있지만 안전합니다. –

+0

+1 평가/악한 말장난 (사실은 악의를 말하고 있음). 진지하게, 플래그가 참이면 "while"으로, 거짓이면 "unless"로 작동하는 루프를 만드는 방법을 찾아야합니다. 또는 "루프"내용을 하위로 모듈화하고 조건부 "while"또는 "until"(내용을 추상화하면 코드 중복을 피할 수 있음) – DVK

2

while"while"은 다른 것입니다.

문자열에 임의의 언어 구문을 사용할 수 없습니다.

관련 문제