Hello grasshopper!!!,
Anonymous Monk may well be right to recommend that you change to Perl6::Form, but in the meantime what you are trying to do is quite possible with format:
#! perl use strict; use warnings; use LWP::Simple; my @data; format NASDAQ_HEADER = SYMBOL Name High Low + Close Volume Change +/- ---------------------------------------------------------------------- +--------------------------------------------------- . format NASDAQ_FORMAT = @<<<<< @<<<<<<< @###.##### @###.#### @### +.#### @||||||||||| @###.### @##.## @data . for my $i ('O' .. 'Q') { # Retrieve data from URL my $url = 'http://eoddata.com/stocklist/NASDAQ/' . $i . '.htm'; my $str = get($url) or die "Cannot get URL '$url': $!"; print "Retrieved URL: $url\n"; my @array = ($str =~ m/.+?Chart for NASDAQ,\w+?">(.+?)<\/A><\/td>< +td>(.+?)<\/td><td align=right>(\d+?\.\d+?)<\/td><td align=right>(\d+? +\.\d+?)<\/td><td align=right>(\d+?\.\d+?)<\/td><td align=right>(\d+?, +?\d+?,?\d+?)<\/td><td align="right">(-?\d+?\.\d+?)<\/td><td align="ce +nter"><IMG.+?><\/td><td align="left">(-?\d+?\.\d+?)<\/td>.+?/gi); # Prepare output file and format my $out = 'nasdaq_list_format' . $i . '.txt'; open(my $fh, '>', $out) or die "Cannot open file '$out' for writin +g: $!"; my $ofh = select $fh; # Select filehandle for write( +) local $^L = ''; # Suppress form feed local $% = 1; # Set current page number local $^ = 'NASDAQ_HEADER'; # Set format header local $~ = 'NASDAQ_FORMAT'; # Set format local $= = @array / 8 + 5; # Set lines per page # Write formatted output to file write $fh while @data = splice @array, 0, 8; # Tidy up close $fh or die "Cannot close file '$out': $!"; select $ofh; # Restore old filehandle (STDI +N) }
Some notes:
The key change is to select the filehandle for the subsequent write statement, and to set $^, $~, etc., to their appropriate values. Note that when $^ and $~ are set explicitly, the format names don’t need to match the filehandle name.
Using format is no excuse not to use strict and lexical variables (including a lexical filehandle)!
Whenever you see something like ($m,$n,$o,$p,$q,$r,$s,$t) =, think: “That should be an array.”
The line:
my $str = get($url) or die "Couldn't get it!" unless defined $str;
generates a warning, because $str is evaluated in the unless condition before it’s declared. It’s probably just a typo; but, for the record, the unless clause is redundant here.
Hope that helps,
| Athanasius <°(((>< contra mundum | Iustus alius egestas vitae, eros Piratica, |
In reply to Re: format trouble
by Athanasius
in thread format trouble
by grasshopper!!!
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |