Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: -e not working Perl 5.008008

by kennethk (Abbot)
on Feb 27, 2015 at 20:10 UTC ( [id://1118122]=note: print w/replies, xml ) Need Help??


in reply to -e not working Perl 5.008008

Are you sure that you've got stringwise equivalence on the name? Given that you are looking at non-ASCII characters, it's quite possible you've got encoding issues. Where do you get $esp? What happens when you run the following on your two platforms?
perl -le 'print join q{-}, map ord,split q{} for <*mero.png>'

#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

Replies are listed 'Best First'.
Re^2: -e not working Perl 5.008008
by GLJSD (Initiate) on Feb 27, 2015 at 22:29 UTC

    The data is retrieved from a tab-separated text file. You can visit the results at this address: http://www.1604.ca/cgi-bin/spanish.pl

    You'll notice that if I check for the existence of the image file, Perl does not see it. But the image is in fact there by looking at the next column where I don't check for its existence.

    Here's more of my code:
    for $i ( 0 .. 23 ) { $tit=$info[$i]{'TIT'}; $mfr=$info[$i]{'MFR'}; $mes=$info[$i]{'MES'}; $c="$dpmg/$mes.$epng"; if (-e $c) { $c2="<IMG src='$c'>"; } else { $c2="<IMG src='$dimg/_x2.png'>"; } $d="$dpmg/$mes.$epng"; $d2="<IMG src='$d'>"; $e="$dpud/$mes.$eaud"; if (-e $e) { $e="$daud/$mes.$eaud"; $e2="<IMG src=\"$dimg/_v1.png\" onclick=\"au.src='$e'; au.play() +;\" >"; } else { $e2="<IMG src='$dimg/_v0.png'>"; } print "<DIV>$tit</DIV> <DIV>$mfr</DIV> <DIV>$mes</DIV> <DIV cla +ss='fn'>$c</DIV> $c2 <DIV class='fn'>$d</DIV> $d2 $e2 <BR>\n"; }
      There's a couple of areas where you could be bit by encodings in this chain -- percent-encoding, HTML_entities, and Linux/Windows issues. That you are also rolling a web server into the mix does not simplify the issue. Did you perform the ord test I described before? The working accented link is resolved by the browser as
      http://www.1604.ca/espanol/images/n%C3%BAmero.png
      which means you're using UTF codepoint U+00FA, or 250. This is possibly subject to some major high-bit code page malarkey. What happens when you run
      perl -le 'print -e sprintf "n%smero.png", chr 250'
      in the target directory? Usually, this sort of problem comes down to figuring out where you've forgotten to encode/decode a string. My copy of perl 5.8.9 handles this just fine.

      #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

        Thanks to all for the feedback. I am just programming as a hobby - not a pro. I have saved these suggestions and will work on this in the coming week. Thanks again.

        Thanks for all the help. I just want to mention that I don't own the server. The site is being hosted by the company SiteGround (which I think is in the USA). The data file is also located on that same server. My Perl script is able to read the word "número" (from that data file) and store it into its variable $mes. Then, the Perl script prints that variable $mes to my browser and my browser displays the correct word. I tried this on my Win7 computer running Google Chrome, and also on my son's iPad using Safari. Perhaps, Perl stores n%C3%BAmero into that variable which browsers can resolve as you mentioned, but Perl is not able to resolve. The strange thing is that my local Perl (running through Apache) is able to resolve this. I'm fairly new to Perl, I didn't understand the ord test. I don't have access to a perl prompt (command prompt) if that's what you meant. I did add this code to my website, not sure if it's what you were hoping to see.

        for $i ( 0 .. 23 ) { $mfr=$info[$i]{'MFR'}; $mes=$info[$i]{'MES'}; my @array = split //,$mes; @array = map(ord, @array); my @chars = map(chr, @array); my @array2 = unpack("C*", $mes); my @chars2 = map(chr, @array2); $c="$dpmg/$mes.$epng"; if (-e $c) { $c2=$c; } else { $c2="$dpmg/_x2.png"; } $d="$dpmg/$mes.$epng"; print "<DIV>$mfr</DIV> <DIV>$mes</DIV> <DIV>$c</DIV> <IMG src='$c2'> <DIV>$d</DIV> <IMG src='$d'> <DIV>@array</DIV> <DIV>@chars</DIV> <DIV>@array2</DIV> <DIV>@chars2</DIV> <BR>\n"; }
      But the image is in fact there by looking at the next column where I don't check for its existence.
      Well that's weird cause in my browser I don't see exactly the three images for which Perl can't find the filenames. Anyway, $info[$i]{'MES'} (or whatever) contains Latin-1 strings. Which your OS can't find, presumably because the real filenames are in UTF-8. OTOH, Windows can, because of some legacy codepage nonsense or some such.
        Well that's weird cause in my browser I don't see exactly the three images for which Perl can't find the filenames.
        (cause it doesn't fall back to ISO-8859-1)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1118122]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (4)
As of 2024-04-24 06:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found