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

时间:2011-02-12 19:37:42

标签: perl

我有以下内容:

$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”)但它不会让我用它来获取。我做错了什么?

我的确切错误是“script.pl附近的语法错误”}“”....如果我用实际的单词“while”替换$ _ [2],则工作正常

3 个答案:

答案 0 :(得分:2)

因为while"while"是不同的事情。

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

答案 1 :(得分:1)

在perl中不可能使用变量代替关键字。如果你真的必须这样构造,请查看eval - 它允许你以perl代码运行任意字符串。

答案 2 :(得分:1)

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