【发布时间】:2018-03-03 15:35:09
【问题描述】:
我正在尝试执行存储在模块中的查询,但查询中有一些从主文件中读取的变量并且无法正常工作。
模块内无法访问主文件中的变量(其为空白)。
代码如下:
sql.pm
package sql;
use parent 'Exporter';
our @EXPORT = qw(%query);
our %query = (
one => "SELECT isnull(BusinessEntityID, '') as BusinessEntityID,
isnull(Title, '') as Title,
isnull(FirstName, '') as FirstName,
isnull(LastName, '') as LastName,
isnull(Suffix, '') as Suffix,
isnull(JobTitle, '') as JobTitle
FROM HumanResources.vEmployee
where BusinessEntityID = ".$id."
order by BusinessEntityID"
);
1;
main.pl
use strict;
use warnings;
use sql;
my $id = 273;
my $query_main = "$query{one}";
print $query_main;
这将使用 where BusinessEntityID = 而不是 where BusinessEntityID = 273 打印查询
谢谢!
【问题讨论】:
-
在sql包里面创建一个函数
get_query { my ($id)=@_; %query=...}。叫它my $query_main=sql::get_query($id); -
请阅读bobby-tables.com 并使用占位符而不是直接将变量插入到查询中。
-
@wolfrevokcats 谢谢你的快速回复,它有帮助,但我还有更多(50+)依赖于各种 foreach/ifs 等。有没有更简单的方法而不必声明每个模块中的变量?我在想是否可以从 main.pl 导出所有变量并将它们导入 sql.pm
-
@rooger 全局变量几乎总是一个坏主意。你会失去对它的控制。在我从事的几份工作中,我不得不与使用全局变量的现有程序进行大量斗争。如果你有很多变量,你应该使用散列并将其传递给函数,至少
-
@tinita 谢谢你的快速回复,如果可以的话,你能给我一个简单的例子吗?
标签: perl perl-module