Here is the loop that is reading from the file, as requested. The whole script is a couple hundred lines, I can post it if you think it's necessary, but I think the problem is here. I'm using strict and warnings, just so you know.
my $HTML = $query->param(-name=>"file");
print $query->header;
print $query->start_html("Class Schedule");
while (<$HTML>) {
# if (/SEE SCHEDULE OF CLASSES/) {
# next;
# }
if (/^<(?:TR).*?>(\d{5}).*?>(\d{2}).*?>(\d{3}).*?>(\d{3}).*?>(\d{2
+}).*?>(?:[&\w]).*?>(\w+(?:(?:[\s\w|&]+)?)*).*?>\s(\d).*?>(\w*?\d(?:[,
+\d\*]?)*)((?:[\w\d,]?)+).*?>(\w(?:(?:[\w\d-])?)*).*?<\/TR>(<.*)?/i) {
push(@classid, $1);
my $rec = join("", split(/,/, $9));
my $h_fix = join("", split(/,/, $8));
$rec =~ tr/H/h/;
$h_fix =~ tr/H/h/;
push(@classes, $h_fix);
push(@class, parse($h_fix));
push(@location, $10);
my @mi2 = ($2, $3, $4, $5);
push(my @misc_info, \@mi2);
push(@credits, $7);
my $short_name = $6;
$short_name =~ s/&/ AND /;
push(@classname, $short_name);
if ($h_fix =~ /\*$/) {
push (@starperiod, "*");
}
else {
push(@starperiod, "");
}
if ($9) {
push(@classes, $rec);
push(@class, parse($rec));
push(@classid, $1);
push(@location, $10);
push(@misc_info, \@mi2);
push(@credits, $7);
push(@classname, $short_name);
if ($rec =~ /\*$/) {
push (@starperiod, "*");
}
else {
push(@starperiod, "");
}
}
my @erec;
if ($11) {
my @temprec;
@erec = $11 =~ />(.*?)</g;
for (my $z = 0; $z < @erec; $z++) {
my $rectemp;
if ($erec[$z] =~ /^&/) {
}
else {
if ($erec[$z] =~ /\*$/) {
push (@starperiod, "*");
chop($erec[$z]);
$rectemp = $erec[$z];
}
else {
$rectemp = $erec[$z];
}
push(@temprec, $rectemp);
}
}
my $temprec_fix = $temprec[10];
$temprec_fix =~ tr/H/h/;
push(@classid, $classid[-1]);
push(@classes, $temprec_fix);
push(@class, parse($temprec_fix));
push(@location, $temprec[14]);
push(@misc_info, \@mi2);
push(@credits, $credits[-1]);
push(@classname, $short_name);
}
}
}
close ($HTML);
The comments at the top are my workaround, it allowed the script to simply ignore the offending line and continue.
Have fun
-Etan | [reply] [d/l] |
while (<$HTML>)
Is causing problems. The glob is nice in quick and dirty programs
but if the file can not be found there is no error checking. This is
much better for debugging:
open FILE, "<$HTML" or die "Oops opening $HTML, Perl says $!\n";
while (FILE) {
....
}
close FILE;
I would point out that from the security point of view
using a user supplied full file name as you do allows the user to
open any file on your system that your script has read acess to.
Typically you hard code the path and only allow the user to
supply the file name thus constraining them to one dir.
$path = "path/to/my/files";
$HTML =$q->param('file');
open FILE "<$path/$HTML" ....
I suggest changing the while structure to use an open and adding a debugging print to see that
$_ actually contains what you expect within this loop.
cheers
tachyon
s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print
| [reply] [d/l] [select] |