Greetings,
I seldom venture in the web end of the Perl pool, but am doing so now and I seek your advice. I'm using Mojolicious and I'm thinking about how to divide up my code. I was thinking of using a module for database functions, but am wondering how I'm going to pass DB handles back and forth. For example:
DB module:
sub new { bless {}; shift }
sub connect
{
my $self = shift;
my %param = @_;
my $table = "cf_status_log";
my $dbh = DBI->connect(
"DBI:Pg:dbname=$param{'db_name'}; host=$param{'db_host'}",
"$param{'db_user'}", "$param{'db_pass'}",
{ RaiseError => 1 }
) or die "Could not connect to database";
return $dbh;
};
sub inventory_query
{
my $dbh = shift;
my $result = $dbh->prepare( "SELECT * FROM dr_inventory_classes" )
|| die "Could not prepare" ;
}
1;
And the main app:
use lib 'lib';
use DeltaR;
my $dr = DeltaR->new;
sub dbh
{
my $self = shift;
my $dbh = $dr->connect(
db_name => "postgres",
db_user => "postgres",
db_pass => "",
db_host => "127.0.0.1"
);
return $dbh;
};
get '/inventory' => sub
{
my $self = shift;
my $dbh = dbh;
my $rows = $dr->query_inventory( $dbh );
$self->stash(
title => "Inventory report",
record_limit => $record_limit,
rows => $rows,
columns => [ 'Count', 'Class' ]
);
} => "rtable";
app->start;
I don't want to make unneeded connections because not all pages will require the database. I don't know if handle passing like this is the best approach. How would you do it? Passing $dbh around is a bit fiddly. Is there a better way?
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.