This is my first (well perhaps my second) foray into Template::Toolkit.

My test file includes:

$reporter = My::Latest::Module::Reports->new(\%defaults); my $result = $reporter->send_report({ type => 'nightly_summary' }); print STDERR Dumper($result);
->send_report() merely dispatches to an appropriate method based on report type.

sub _nightly_summary { my $self = shift; my $tmpl_dir = $self->{'cfg'}->param("templates.template_dir"); my $tmpl = $self->{'cfg'}->param("rpt_tmpl.nightly_summary"); my $sql = "SELECT substr(NOW(),1,10);"; my $sth = $self->{'dbh_pb'}->prepare($sql); $sth->execute(); my ($date) = $sth->fetchrow_array(); $date = '2008-12-05'; # for testing after midnight my $my_template = "$tmpl_dir/$tmpl"; my $output; # my $output = '/home/hesco/nightly_summary.txt'; print STDERR "The template is: $my_template \nThe output file is: $o +utput \n"; my $stats = $self->_compute_rpt_stats($date); my $template = Template->new(); # $template->process($my_template,$stats); $template->process($my_template,$stats,$output); print STDERR Dumper($output); # return $stats; } sub _compute_rpt_stats { my $self = shift; my $date = shift; my ($stats,$sql,$sth,$sth1,$result,@loop_data); my $dbh = $self->{'dbh_pb'}; my $sql_stats = $self->{'cfg'}->get_block("stats"); my $sql_stats_today = $self->{'cfg'}->get_block("stats_today"); # print STDERR Dumper(\$sql_stats); my @statistics = qw/shifts dialed spoken messages supporters new_sub +scribers yard_signs call_backs contributions pledges/; foreach my $statistic (@statistics){ # print "The next statistic is: $statistic.\n"; $sql = $sql_stats->{'sql_stats_' . $statistic}; if(length($sql) > 3){ # print STDERR $sql,"\n"; $sth1 = $dbh->prepare($sql); $sth1->execute(); ($stats->{'team'}->{$statistic}) = $sth1->fetchrow_array() || 'u +nknown'; } else { $stats->{'team'}->{$statistic} = 'unknown'; } $sql = $sql_stats_today->{'sql_stats_today_' . $statistic}; if(length($sql) > 3){ $sth1 = $dbh->prepare($sql); $sth1->execute($date); ($stats->{'team_today'}->{$statistic}) = $sth1->fetchrow_array() + || 'unknown'; } else { $stats->{'team_today'}->{$statistic} = 'unknown'; } } $sql = $self->{'cfg'}->param("sql_rpt.sql_rpt_vols_worked_today"); $sth = $self->{'dbh_pb'}->prepare($sql); my @loop_data_worked_today = (); $sth->execute($date) or die "Unable to execute $sql."; while (my $row_hashref = $sth->fetchrow_hashref()){ my %row_data = (); $row_data{'NAME'} = $row_hashref->{'name'}; $row_data{'LOG_IN_DATE'} = $row_hashref->{'log_in_date'}; $row_data{'NUMS_ASSIGNED'} = $row_hashref->{'nums_assigned'}; push (@loop_data_worked_today, \%row_data); } $stats->{'loop'}->{'VOLS_WORKED_TODAY'} = \@loop_data_worked_today; # etc., etc., etc. # print Dumper(\$stats); return $stats; }
My output reads:

The template is: /etc/canvas/tmpl/rpt/nightly_summary.tmpl The output file is: $VAR1 = undef; $VAR1 = 1;
And a sample of the template reads:

The current Message of the Day reads: <tmpl_var name=MOD> Overall our phone canvass team has worked <tmpl_var name=TEAM_SHIFTS> phone bank shifts, dialed <tmpl_var name=TEAM_DIALED> phone numbers, spoken with <tmpl_var name=TEAM_SPOKEN> voters, left messages with <tmpl_var name=TEAM_MSGS> households, identified <tmpl_var name=TEAM_SUPPORTERS> supporters, added <tmpl_var name=TEAM_SUBSCRIBERS> subscribers to our campaign lists, placed <tmpl_var name=TEAM_YARD_SIGNS> yard signs, scheduled <tmpl_var name=TEAM_CALL_BACKS> call backs, raised $<tmpl_var name=TEAM_CONTRIBUTIONS> in contributions plus $<tmpl_var name=TEAM_PLEDGES> in pledges. The following Phone Bank Volunteers Worked today: <tmpl_loop name="VOLS_WORKED_TODAY"> <tmpl_var name=CALLER_NAME> <tmpl_var name=NUMS_ASSIGNED_TODAY> </tmpl_loop> Volunteers Identified today: <tmpl_loop name="VOLUNTEERS_ID_TODAY"> <tmpl_var name=VOTER_NAME>; <tmpl_var name=VOTER_ADDRESS> <tmpl_var name=VOTER_PHONE>; <tmpl_var name=VOTER_EMAIL> Voter Registration Number: <tmpl_var name=VOTER_ID>; VoterID Code: <tm +pl_var name=VOTER_ID_CODE>; Yardsign: <tmpl_var name=YARDSIGN>; Call +again?: <tmpl_var name=FOLLWUP_CALL> \n Comments: <tmpl_var name=COMMENTS> \n </tmpl_loop>
So it appears that $output, once dumped is undefined, and that the $result returned by this ->_nightly_summary() method is true.

My question though is: what happened to my output? How do I find it? Dumping my $stats hashref shows useful data, well organized. My template seems to be there. What happened to the marriage between the two?

-- Hugh

UPDATE:

Folks below nailed it. Thanks. I was the victim of my own early morning hours sloppy cut-n-paste errors, incompletely adapting from an HTML::Template script to a Template::Toolkit script. With Corion's help, I saw this issue early this morning and started building a new test script which is giving me some anticipated output. I'm now getting most of the single statistics, I keep seeing "file error - parse error . . . unexpected token (mod)" messages when I try to add that in. And after some sleep, I'm going to start now on making those loops work for me the TT way.

Thanks everyone who pointed the way.

ANOTHER UPDATE:

Success! I got the loops working and this is now generating a useful (if still somewhat ugly) report. I've moved what I learned from my test script into the module and tested it there and all seems to be fine with the world.

Next step: this template is intended for use in generating an email report from a cron job. How do I make my template generate wrapped paragraphs suitable for that use?

YET ANOTHER UPDATE:

Thank you, genehack. That was the ticket. Four tests later and this seems to be working. Thanks, but I've got a MIME::Lite based module set up to send the email. My question was focused more on getting the copy formatted appropriately to feed to that module.

if( $lal && $lol ) { $life++; }

In reply to Looking for output from Template::Toolkit by hesco

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.