Home > Archive > PERL CGI Beginners > September 2004 > HTML::Template still choking
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
HTML::Template still choking
|
|
| Rick Triplett 2004-09-29, 3:55 pm |
| HTML::Template is still choking, giving the error...
HTML::Template->new() : Syntax error in <TMPL_*> tag at /XXX[here I'm
ommiting the path]XXXX/data/templates/student_info.tmpl : 13. at
/usr/local/lib/perl5/site_perl/5.005/HTML/Template.pm line 2243.
I now think the fault is in my Perl code which handles the %datahash
that is tied to a file. I'm new to this and this script is the most
complicated
I've ever tried. Sorry to post so much code, but my blunders the the
light
of day and some sound criticism. Many thanks in advance!
#!/usr/bin/perl -w
use strict;
use CGI;
$CGI::DISABLE_UPLOADS = 1;
$CGI::POST_MAX = 102_400; # 100 KB
use DB_File; # module for Berkeley DBM w/ DB_HASH file type
use Fcntl qw/ :DEFAULT :flock /; # to help with file handling
use HTML::Template;
# This script is called by a post from "student_info_viewer.html"
# or a post from the HTML page generated by this script
# Array all the parameters we will use
my @info_prams = qw(
student_info
name_full enroll_type
name_nick account_number
name_last password
date_birth student_email
sex mentor_email
date_entered suspended
date_withdrawn
);
# ID the student and change to student's directory
my $q = new CGI;
my $student_id = $q->param ( "student_id" );
chdir "/xxxxxxxxxxxxxxxx/data/students/$student_id/";
my $file_to_view = "student_info.db";
# Declare the 'working' datahash, then tie it to file
my %datahash;
my $db = tie %datahash, 'DB_File', $file_to_view, O_RDWR | O_CREAT, 0644
or die "Can't initialize database: $!\n";
my $fd = $db->fd(); # get a file descriptor
open DATAFILE, "+<&=$fd" or die "Can't safely open file: $!\n";
flock ( DATAFILE, LOCK_EX )
or die "Unable to acquire exclusive lock: $!. Aborting";
undef $db; # Avoid untie problems
# Update the hash with the posted parameters
foreach (@info_prams) {
chomp;
$datahash{$_} = $q->param ( $_ );
}
# Generate a page using the template and latest data
use constant TMPL_FILE =>
"/big/dom/xlibertylearning/data/templates/student_info.tmpl";
my $tmpl = new HTML::Template( filename => TMPL_FILE );
# Assign template parameters
foreach (@info_prams) {
$tmpl->param( $_ => $datahash{$_} );
}
print "Content-type: text/html\n\n",
$tmpl->output;
untie %datahash;
close DATAFILE;
exit;
| |
| Wiggins d Anconia 2004-09-29, 3:55 pm |
| > HTML::Template is still choking, giving the error...
>
> HTML::Template->new() : Syntax error in <TMPL_*> tag at /XXX[here I'm
> ommiting the path]XXXX/data/templates/student_info.tmpl : 13. at
> /usr/local/lib/perl5/site_perl/5.005/HTML/Template.pm line 2243.
>
> I now think the fault is in my Perl code which handles the %datahash
> that is tied to a file. I'm new to this and this script is the most
> complicated
> I've ever tried. Sorry to post so much code, but my blunders the the
> light
> of day and some sound criticism. Many thanks in advance!
>
I am not so sure about that. Can you post the *actual* template,
especially line 13? Your previous message said that that was a typical
line from the template, was that the actual line that was causing the
problem? Can you verify that the data hash is not the problem, by
pulling the code to read the template (aka the constructor) into its own
script and see if it still dies? Have you tried enabling some of the
debugging options that H::T provides? It appears that it will give very
verbose indication of what it is doing which might help narrow down the
problem. It would help to narrow down to the exact line what part of
your script is failing, from the error it still seems like it is during
template construction.
http://danconia.org
> #!/usr/bin/perl -w
> use strict;
> use CGI;
> $CGI::DISABLE_UPLOADS = 1;
> $CGI::POST_MAX = 102_400; # 100 KB
> use DB_File; # module for Berkeley DBM w/ DB_HASH file type
> use Fcntl qw/ :DEFAULT :flock /; # to help with file handling
> use HTML::Template;
> # This script is called by a post from "student_info_viewer.html"
> # or a post from the HTML page generated by this script
>
> # Array all the parameters we will use
> my @info_prams = qw(
> student_info
> name_full enroll_type
> name_nick account_number
> name_last password
> date_birth student_email
> sex mentor_email
> date_entered suspended
> date_withdrawn
> );
>
> # ID the student and change to student's directory
> my $q = new CGI;
> my $student_id = $q->param ( "student_id" );
> chdir "/xxxxxxxxxxxxxxxx/data/students/$student_id/";
> my $file_to_view = "student_info.db";
>
> # Declare the 'working' datahash, then tie it to file
> my %datahash;
> my $db = tie %datahash, 'DB_File', $file_to_view, O_RDWR | O_CREAT, 0644
> or die "Can't initialize database: $!\n";
> my $fd = $db->fd(); # get a file descriptor
> open DATAFILE, "+<&=$fd" or die "Can't safely open file: $!\n";
> flock ( DATAFILE, LOCK_EX )
> or die "Unable to acquire exclusive lock: $!. Aborting";
> undef $db; # Avoid untie problems
>
> # Update the hash with the posted parameters
> foreach (@info_prams) {
> chomp;
> $datahash{$_} = $q->param ( $_ );
> }
> # Generate a page using the template and latest data
> use constant TMPL_FILE =>
> "/big/dom/xlibertylearning/data/templates/student_info.tmpl";
> my $tmpl = new HTML::Template( filename => TMPL_FILE );
> # Assign template parameters
> foreach (@info_prams) {
> $tmpl->param( $_ => $datahash{$_} );
> }
> print "Content-type: text/html\n\n",
> $tmpl->output;
> untie %datahash;
> close DATAFILE;
> exit;
>
| |
| Rick Triplett 2004-09-29, 3:55 pm |
| Thanks for mentioning that H::T has "debugging options" -- I didn't
realize this. I've looked at H::T on CPAN and found that much of what
is there is over my head. A debugging option sounds like just what I
need. I'll go back to the docs on H::T and see if I can figure them
out!
On Sep 29, 2004, at 9:28 AM, Wiggins d Anconia wrote:
>
> I am not so sure about that. Can you post the *actual* template,
> especially line 13? Your previous message said that that was a typical
> line from the template, was that the actual line that was causing the
> problem? Can you verify that the data hash is not the problem, by
> pulling the code to read the template (aka the constructor) into its
> own
> script and see if it still dies? Have you tried enabling some of the
> debugging options that H::T provides? It appears that it will give very
> verbose indication of what it is doing which might help narrow down the
> problem. It would help to narrow down to the exact line what part of
> your script is failing, from the error it still seems like it is during
> template construction.
>
> http://danconia.org
|
|
|
|
|