2015-05-04 60 views
0

我有一個從Perl執行的SQL語句。

$my_sql = qq (
      SELECT 1 AS .... 
      ); 

然後我做

my $sm = $dbh->prepare($my_sql); 
    $sm->execute; 

的問題是,我的SQL已正則表達式這樣在很多地方。

value ~ '^[1-9][0-9]?/[1-9][0-9]?/[1-9][0-9]{3}$': 

所以我在執行perl腳本時因爲這些'$'而出錯。

Use of uninitialized value $' in concatenation (.) or string at 
DBD::Pg::st execute failed: execute called with an unbound placeholder at 

如何避免這些錯誤並使SQL語句正常工作?

+0

你真的需要'qq'嗎? – choroba

+2

使用'q()'來代替變量插值。 '?'也將需要轉義,請查看'DBI'的文檔以瞭解如何做到這一點。 – TLP

回答

3

qq(something)只是另一種說"something"的方式,而q(something)表示'something'

"this"'this'之間的差異是插值,它只在雙引號內啓用。

my $foo = 123; 
print "<< $foo >>"; # prints <<123>> 
print '<< $foo >>'; # prints << $foo >> 

那麼,既然$不是特殊符號裏面'',只是改變qqq