为什么我不能在我的子程序中使用它?
问题描述:
我有以下几点:为什么我不能在我的子程序中使用它?
$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语句,“鲍勃”,要么是“同时”或“除非”变到子程序。 我的子程序会让我传递“while”变量(它会在“n”时打印),但它不会让我用它来读取。我究竟做错了什么?
我确切的错误是}“‘在接近script.pl语法错误’” ......如果我替换为$工作正常_ [2]与实际字“而”
答
我认为你在这里需要的是一个eval,然而这有邪恶写在它的全部。您一定要确保该代码中没有任何内容受到污染(来自用户)。我想你可能应该非常努力地思考为什么你会这样做,如果没有更好的方法(例如两个不同的功能)。我知道我们的程序员喜欢懒惰,但是冒险是危险的。
+0
也许你可以测试字符串,如果它是“while”做while循环,如果它是“until”做一个until循环。一些重复的代码,但更安全。 – 2011-02-12 19:52:59
答
因为while
和"while"
是不同的东西。
你不能用任意的语言结构替换字符串。
因为Perl不会像那样做关键字替换。第三个参数应该代表什么(除了`while')? – BoltClock 2011-02-12 19:48:01