为什么我不能在我的子程序中使用它?

问题描述:

我有以下几点:为什么我不能在我的子程序中使用它?

$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]与实际字“而”

+1

因为Perl不会像那样做关键字替换。第三个参数应该代表什么(除了`while')? – BoltClock 2011-02-12 19:48:01

这是不可能的在perl中使用变量代替关键字。如果你真的必须做这样的结构,看看eval - 它可以让你运行任意字符串作为Perl代码。

我认为你在这里需要的是一个eval,然而这有邪恶写在它的全部。您一定要确保该代码中没有任何内容受到污染(来自用户)。我想你可能应该非常努力地思考为什么你会这样做,如果没有更好的方法(例如两个不同的功能)。我知道我们的程序员喜欢懒惰,但是冒险是危险的。

+0

也许你可以测试字符串,如果它是“while”做while循环,如果它是“until”做一个until循环。一些重复的代码,但更安全。 – 2011-02-12 19:52:59

因为while"while"是不同的东西。

你不能用任意的语言结构替换字符串。