[perl]代码库
#-----------------------------
sub template
{
my ( $filename, $fillings ) = @_;
my $text;
local $/;
# slurp mode (undef)
local *F;
# create local filehandle
open ( F, "< $filename\0" ) || return;
$text = <F>;
# read whole file
close ( F );
# ignore retval
# replace quoted words with value in %$fillings hash
$text =~ s{ %% ( .*? ) %% }
{ exists ( $fillings->{$1} )
? $fillings->{$1}
: ""
} gsex;
return $text;
}
#-----------------------------
#<!-- simple.template for internal template() function -->
#<HTML><HEAD><TITLE>Report for %%username%%</TITLE></HEAD>
#<BODY><H1>Report for %%username%%</H1>
#%%username%% logged in %%count%% times, for a total of %%total%% minutes.
#-----------------------------
#<!-- fancy.template for Text::Template -->
#<HTML><HEAD><TITLE>Report for {$user}</TITLE></HEAD>
#<BODY><H1>Report for {$user}</H1>
#{ lcfirst($user) } logged in {$count} times, for a total of
#{ int($total / 60) } minutes.
#-----------------------------
%fields = (
username => $whats_his_name,
count => $login_count,
total => $minute_used,
);
print template ( "/home/httpd/templates/simple.template", \%fields );
#-----------------------------
# download the following standalone program
#!/usr/bin/perl -w
# userrep1 - report duration of user logins using SQL database
use DBI;
use CGI qw ( :standard );
# template() defined as in the Solution section above
$user = param ( "username" ) or die "No username";
$dbh = DBI->connect ( "dbi:mysql:connections:mysql.domain.com:3306",
"connections", "seekritpassword" ) or die "Couldn't connect\n";
$sth = $dbh->prepare ( <<"END_OF_SELECT" ) or die "Couldn't prepare SQL";
SELECT COUNT ( duration ),SUM ( duration )
FROM logins WHERE username='$user'
END_OF_SELECT
# this time the duration is assumed to be in seconds
if ( @row = $sth->fetchrow() )
{
( $count, $seconds ) = @row;
}
else
{
( $count, $seconds ) = ( 0,0 );
}
$sth->finish();
$dbh->disconnect;
print header();
print template ( "report.tpl",
{
'username' => $user,
'count' => $count,
'total' => $total
} );
#-----------------------------
You owe:
{$total}
#-----------------------------
The average was {$count ? ( $total/$count ) : 0} .
#-----------------------------
# download the following standalone program
#!/usr/bin/perl -w
# userrep2 - report duration of user logins using SQL database
use Text::Template;
use DBI;
use CGI qw ( :standard );
$tmpl = "/home/httpd/templates/fancy.template";
$template = Text::Template->new ( -type => "file", -source => $tmpl );
$user = param ( "username" ) or die "No username";
$dbh = DBI->connect ( "dbi:mysql:connections:mysql.domain.com:3306",
"connections", "secret passwd" ) or die "Couldn't db connect\n";
$sth = $dbh->prepare ( <<"END_OF_SELECT" ) or die "Couldn't prepare SQL";
SELECT COUNT ( duration ),SUM ( duration )
FROM logins WHERE username='$user'
END_OF_SELECT
$sth->execute() or die "Couldn't execute SQL";
if ( @row = $sth->fetchrow() )
{
( $count, $total ) = @row;
}
else
{
$count = $total = 0;
}
$sth->finish();
$dbh->disconnect;
print header();
print $template->fill_in();
#-----------------------------
by: 发表于:2017-09-18 17:48:25 顶(0) | 踩(0) 回复
??
回复评论