有没有办法将其他变量传递给方法处理程序子程序?我通常不喜欢在子程序范围之外使用全局变量。我有数据库连接和类实例,我希望处理程序可以访问,而不使用全局变量。使用调试到控制台,对于每个处理程序调用,@ _看起来都是空的。
#!/usr/bin/perl
use strict;
use Dancer;
use Data::Dumper;
set('logger' => 'console');
my $somevar = SomeClass->new();
get('/' => sub{
debug(Dumper(@_));
debug($somevar);
return('hello world');
});
答案 0 :(得分:3)
一种方法是使用Dancer提供的vars
哈希值。这里我使用before hook来设置数据库句柄:
use strict;
use warnings;
use Dancer;
use DBI;
hook 'before' => sub {
var dbh => DBI->connect_cached(...);
};
get '/' => sub {
my $qry = vars->{dbh}->prepare("SQL");
...
return "Something, something, query results";
};
答案 1 :(得分:0)
类似
sub get_dbh {
if (! vars('dbh')) {
my $dbh = DBI->connect_cached(...);
session(dbh => $dbh);
}
return vars('dbh');
}
你可以从任何地方访问数据库句柄而不是全局的,在你需要之前不会进行数据库连接,如果你以后在程序中再次需要它,那么仍然在vars集合中并且不需要再创造一次。