Skip to content Skip to sidebar Skip to footer

How Do I Read A Text File By Putting Its Data In A Table Using Cgi In Perl?

The CGI to read the data from merch.txt works but how can I put this in a table? HTML File:

Solution 1:

Using your raw embedded HTML approach, it's not hard. But it is incredibly ugly.

print <<END_OF_HTML;
<html>
<body>
<table>
<tr><th>Sku</th><th>Cust</th></tr>
END_OF_HTMLfor (@orders)  {
  my ($sku, $cust) = split /\|/;
  print'<tr><td>', CGI::escapeHTML($sku), '</td>',
            '<td>', CGI::escapeHTML($cust), '</td></tr>';
}

print <<END_OF_HTML;
</table>
</body>
</html>
END_OF_HTML

But mixing raw HTML with your Perl code is a terrible idea. Please use a templating engine instead. I recommend the Template Toolkit.

Here's a simple CGI program using TT to do what you need.

#!/usr/bin/perluse strict;
use warnings;
use Template;
use CGI qw[header];

my $tt = Template->new;

# Best practice: three-arg open() and lexical filehandlesopenmy $ord_fh, '<', 'merch.txt'ordie $!;
my @orders = <$ord_fh>;
close $ord_fh;

my @order_data = map {
  my ($sku, $cust) = split/\|/;
  { sku => $sku, cust => $cust }
} @orders;

print header;
$tt->process('orders.tt', { orders => \@order_data })
  or dir $tt->error;

And you'll need a template that looks something like this:

<html>
  <head>
    <title>Orders</title>
  </head>
  <body>
    <h1>Orders</h1>
    <table>
      <tr><th>Sku</th><th>Cust</th></tr>
[% FOREACH order IN orders -%]
      <tr><td>[% order.sku | html %]</td><td>[% order.cust | html %]</td></tr>
[% END -%]
    </table>
  </body>
</html>

Post a Comment for "How Do I Read A Text File By Putting Its Data In A Table Using Cgi In Perl?"