in reply to Re: Re: Re: Problem with CGI script not working (regex at fault)
in thread Problem with CGI script not working (regex at fault)

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
  • Comment on Re: Re: Re: Re: Problem with CGI script not working (regex at fault)
  • Download Code

Replies are listed 'Best First'.
Re: Re: Re: Re: Re: Problem with CGI script not working (regex at fault)
by tachyon (Chancellor) on Jul 30, 2001 at 08:17 UTC

    There is nothing much here that explains your problem. There are no print statements so I would not expect this bit to print anything. I would worry that the line

    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