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