
#----------------------------- |
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) 回复
??
回复评论