#!/usr/local/bin/perl
use strict;
use warnings;
use CGI qw/:standard/;
use CGI::Carp qw/fatalsToBrowser/;
Strict/warnings: good habit to start with. Also, good to use "standard", tested modules (CGI, CGI::Carp) rather than re-inventing wheel.
my $wrestlerdir = '/home/ewexpert/public_html/rosterrank';
open(FILE, "$wrestlerdir/wrestlerlist.txt");
my @lines = <FILE>;
chomp (@lines = <FILE>);
close(FILE);
As mentioned by the previous poster, the first @lines=<FILE> line is slurping all of your data, and then being overwritten. Use the second line. Additionally, the indenting between the open and close is a little misleading. I understand why you did it, but the structure implies that @lines may not be in scope after the close(), especially since it is being declared with my.
foreach my $test (@lines) {
open my $fh, "<", "$wrestlerdir/$test.total" or die "Can't open @lines
+.total $!";
my @total = <$fh>;
}
- The variable @total will be re-initialized for each file, and will go out of scope at the end of the loop
- Good use of the "3 argument version" of open. Safer than the form open my $fh, "<$data.txt"
- @total is slurping in the entire contents of the file. From your description, it sounds as if you only need to read the first line. Search this site for the difference between scalar and list context while doing a read.
- @total is not used anywhere other than to read the data from the file. See the first comment in this section. I am guessing it may help in this area :)
print header, start_html('Rankings: '), (@lines), end_html;
This is using "Rankings: " as the page title, and nothing more. You are then printing all of the contents of the list of files, without any HTML formatting (at least in this version of your program), and then the HTML terminator. See the previous set of comments, and the last respondent. I think they may go straight to the heart of the issues in your solution.
Good luck, and ask if you have any more questions on this.
|