in reply to extra space with /

here's the whole script.
#!c:/Perl/bin/Perl -wT use strict;#force us to pre-declare variables use CGI qw/:standard/; print header;#header type is text/html require "c:/progra~1/apache~1/apache/cgi-bin/getmenu.cgi"; & java; my $value = "Angel"; my $lfilename = "products.pdg"; open (FILE, $lfilename) or die "Can't open file!"; my @products; while ( <FILE> ) { if ( /^Begin Product (.*)/i ) # We have a product starting line { my %hash; $hash{ 'prodcode' } = $1; # get the product code. $hash{ 'prodname' } = <FILE>; $hash{ 'prodprice' } = <FILE>; $hash{ 'prodweight' } = <FILE>; my $trackinv = <FILE>; $hash{ 'tracking' } = ( $trackinv =~ /(Yes|No)/i ); my $img = <FILE>; my($img2,$img1)=split(/\|/, $img); $hash{ 'img1'} = $img1; my $prodtxt = <FILE>; my ($text1,$text2)=split(/\\/, $prodtxt); $hash{ 'txt1' } = $text1; $hash{ 'txt2' } = $text2; my $line = <FILE>; last if ( $line =~ /End Product/ ); if ( $line =~ /^\s*Begin Option (.*)$/ ) { my $name = $1; my @option_list; while ( <FILE> ) { last if ( /End Option/ ); push @option_list, $_; } $hash{ $name } = \@option_list; } else { #if there is no option, then stick what's in front of the : +as the hash name, the rest as it's value my ( $name, $value ) = ( $line =~ /^\s*(.*?):(.*)$/ ); $hash{ $name } = $value; } push @products, \%hash; } } close (FILE); print "<HTML>"; print "<TABLE ALIGN\= CENTER>"; print "<TR>"; print "<TD>"; foreach my $ref ( @products ) { if ($ref->{prodname} =~ ($value)) { print "<B>"; print $ref->{prodname}; print "</B>"; print "<br>"; print "<IMG SRC\=\"$ref->{img1}\">"; print "<br>"; print $ref->{prodprice}; print "<br>"; print "<a href\=\"shopper\.exe\?preadd\=action\&amp\;key\=$ref +->{prodcode}\">", "Add to Cart", "</a>"; #print $ref->{prodtext}; print "<br>"; my $textr1 = "$ref->{txt1}"; my $textr2 = "$ref->{txt2}"; my $subdir = "c:/progra~1/apache~1/apache/cgi-bin/PDG_Cart"; my $filetxt = "/$textr1/$textr2"; my $please = "$subdir$filetxt"; print "$please"; open (FILE, "$please") or die "Can't open file!"; print while <FILE>; close FILE; } } print "</TD>"; print "</TR>"; print "</TABLE>"; print "<br>"; print "<TABLE>";

Replies are listed 'Best First'.
Re: Re: extra space with /
by extremely (Priest) on Apr 03, 2001 at 10:56 UTC
    Add the print debug line I mentioned where you print $please.

    Also, the quotes in my $textr2 = "$ref->{txt2}"; are useless. In fact, why not just do my $filetxt ="/$ref->{txt1}/$ref->{txt2}";? You are also killing yourself to quote hash indexes when you don't need to.

    UPDATE: The more I look at your code, the more I'm convinced you have a space in front of one line in your datafile...

    --
    $you = new YOU;
    honk() if $you->love(perl)

Re: Re: extra space with /
by alfie (Pilgrim) on Apr 03, 2001 at 11:06 UTC
    First of all: Use perlfunc:chomp on your input to get rid of the trailing newline. On the other hand, that shouldn't be the problem you currently have.

    It seems to me that you might have the space in the file you read, with a quick lookthrough I don't see the problem in the code (or, I might just be distracted ;). I personally would use the following for asigning the txt1 and txt2:

    my $textr1 = $ref->{'txt1'}; my $textr2 = $ref->{'txt2'};
    No need to put the whole ref in quotes, and I think it's cleaner if you put the key in quotes.
    --
    Alfie
      yeah, i'll keep working on it. i don't think it's the file i'm reading either, because if i just take that one slash out, there is no extra space. and if i open the file and look at it, there is no space. it's weird. but true, so i better figure it out.