Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

comment on

( #3333=superdoc: print w/replies, xml ) Need Help??

Fellow monks,

First of all, many thanks to all those who took the time to offer advice on my first Perl program, posted here a week or so ago. I learned a lot from the numerous helpful comments. After some thought, I decided it needed an explanatory table added, and so I humbly present the revised version, and ask once again for the collective wisdom of the Monastery on how it might be improved. I am sure the kludgey way I have created the "notes" hash (just shoving everything into an array and copying it to a hash) must be fairly low down on the list of Ways To Do It. I should also like to ask for enlightenment on how to add three zeroes to the end of each number in the data table and then commify the result.

Thanks once again, mooseboy

#!/usr/bin/perl use diagnostics; use warnings; use strict; use CGI; ## Column headings my @members = qw/ Algeria Indonesia Iran Iraq Kuwait Libya Nigeria Qat +ar Saudi_Arabia UAE Venezuela total_OPEC /; @members = map { tr/_/ /; $_ } @members; ## Load data my (%quotas, @dates, @notes, %notes); while (<DATA>) { ( my $period, $_ ) = split ':'; @{$quotas{$period}}{@members} = split ' '; push @dates, $period; } ## Load notes open (NOTES, 'notes.dat') or die "Couldn't open notes.dat: $!"; my @dates_copy = @dates; while (<NOTES>) { $/ = "\n\n"; my $date = shift @dates_copy; push @notes, ($date, $_); %notes = @notes; } ## Introductory paragraph my $query = CGI->new(); print $query->header("text/html"), $query->start_html( -title => "QuotaBase: a database of OPEC o +il production quotas", -bgcolor => "#cbcbcb" ), $query->h1("Welcome to QuotaBase!"), $query->table( $query->Tr( $query->td({-width => "600"}, $query->p(<<EOP) QuotaBase is an interactive database of OPEC oil production quotas. By + default, the <b>current quotas</b> are displayed. To view <b>histori +cal quota information</b>, select the period you want from the drop-d +own list and click the 'Show quotas' button. A table of all the quotas for that period will be displayed. EOP ) ) ), $query->start_form(), "Choose a period: ", "&nbsp;", $query->popup_menu( -name=>'period', -values=>[@dates], -default=>$dates[0]), "&nbsp;&nbsp;", $query->submit(-name=>'submit', -value=>'Show quotas'), "&nbsp;&nbsp;", $query->defaults('Reset current quotas'), $query->endform; ## Outer table print $query->start_table({ -border => 0, -width => 520 }), $query->start_Tr, $query->start_td; ## Data table my $period = $query->param('period') || $dates[0]; print $query->table({-border=>1}, $query->Tr( $query->td({-colspan=>2,-align=>"center +"},"<b>$period</b>") ), map { $query->Tr( $query->td({-width=>130,-align=>"left +" }, $_), $query->td({-width=>130,-align=>"righ +t"}, $quotas{$period}{$_}) ) } sort keys %{$quotas{$period}} + ); print $query->end_td, $query->start_td({-width=>260,-valign=>"top"}); ## Notes table print $query->table({-border=>1,-width=>260}, $query->Tr( $query->td({-align=>"center"},"<b>Note +s</b>") ), $query->Tr( $query->td("<font size=2>$notes{$perio +d}</font>"), ), ); ## End outer table print $query->end_td, $query->end_Tr, $query->end_table; print $query->end_html; __DATA__ Jan 02 - Dec 02: 693 1125 3186 0 1741 1162 1787 562 7053 189 +4 2497 21700 Sep 01 - Dec 01: 741 1203 3406 0 1861 1242 1911 601 7541 202 +5 2670 23201 Apr 01 - Aug 01: 773 1255 3552 0 1941 1296 1993 627 7865 211 +3 2786 24201 Feb 01 - Mar 01: 805 1307 3698 0 2021 1350 2075 653 8189 220 +1 2902 25201

And the 'notes.dat' file looks like this:

As agreed at the 118th Conference, November 14, 2001, and confirmed by + the Consultative Meeting of the Conference, Cairo, Egypt, December 2 +8, 2001. As agreed by the OPEC Conference, July 25, 2001. As agreed at the 114th Conference, March 17, 2001. As agreed at the 113th Conference, January 17, 2001.

In reply to First program revisited by mooseboy

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

  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or or How to display code and escape characters are good places to start.
Log In?

What's my password?
Create A New User
Domain Nodelet?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (1)
As of 2021-09-29 02:57 GMT
Find Nodes?
    Voting Booth?

    No recent polls found