почему я не могу использовать это в своей подпрограмме? - PullRequest
0 голосов
/ 12 февраля 2011

У меня есть следующее:

$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 или then в подпрограмму.Моя подпрограмма позволит мне передать переменную while (она выведет «while \ n»), но не позволит использовать ее для извлечения.Что я делаю не так?

моя точная ошибка - "синтаксическая ошибка в script.pl рядом с"} "" .... работает нормально, если я заменю $ _ [2] фактическим словом "while"

Ответы [ 3 ]

2 голосов
/ 12 февраля 2011

Потому что while и "while" это разные вещи.

Нельзя заменить произвольные языковые конструкции на строки.

1 голос
/ 12 февраля 2011

Я думаю, что вам здесь понадобится eval , однако на нем написано зло. Вы определенно хотите быть уверены, что ничего в этом коде не испорчено (от пользователя). Я думаю, что вы, вероятно, должны очень серьезно подумать о том, почему вы хотели бы сделать это, и если нет лучшего способа (например, две разные функции). Я знаю, что нам, программистам, нравится быть ленивыми, но уловки опасны.

1 голос
/ 12 февраля 2011

Невозможно использовать переменную вместо ключевого слова в perl. Если вы действительно должны делать такие конструкции, посмотрите на eval - он позволяет вам запускать произвольную строку как код perl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...