Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Binary File Load error?

by madtoperl (Hermit)
on Apr 13, 2006 at 05:03 UTC ( [id://543000]=perlquestion: print w/replies, xml ) Need Help??

madtoperl has asked for the wisdom of the Perl Monks concerning the following question:

This node falls below the community's threshold of quality. You may see it by logging in.

Replies are listed 'Best First'.
Re: Binary File Load error?
by ikegami (Patriarch) on Apr 13, 2006 at 06:02 UTC
    Just to clarify the previous replies, using binmode on the input handle is not enough. You must use binmode (or its equivalent) on both the input and the output handles.

    In Windows,
    Not using binmode on the input handle will cause the convertion of CRLF to LF.
    Not using binmode on the output handle will cause the convertion of LF to CRLF.

    So while $content contained an identical copy of the file, print was converting all LFs to CRLFs.

    The output handle is STDOUT in this case, so just add binmode STDOUT; before the print to fix the problem.

Re: Binary File Load error?
by chargrill (Parson) on Oct 07, 2006 at 02:34 UTC

    madtoperl: it's a pity you didn't google this before you posted, otherwise you might have noticed this livejournal entry from "timwi" a few years ago that had the exact same problem (and nearly the exact same code, and wording, of your question).

    It's reproduced here for your convenience:

    Timwi (timwi) wrote in perl, @ 2004-10-21 00:11:00 Continued problems with binary files Dear hackers again, thanks for your hints in the previous entry. However, I'm still having + problems here. How do I simply load a file into memory? Again, without corrupting any + line endings? I've tried this: #!C:\Perl\bin\perl.exe use strict; print "Content-Type: image/jpeg\n\n"; local $/ = undef; open F, 'C:\Temp\temp.jpg'; binmode F; my $content = <F>; close F; print $content; and this produces a corrupt response. What is the correct way of loadi +ng a binary file? Thanks for any help in advance.


    --chargrill
    s**lil*; $*=join'',sort split q**; s;.*;grr; &&s+(.(.)).+$2$1+; $; = qq-$_-;s,.*,ahc,;$,.=chop for split q,,,reverse;print for($,,$;,$*,$/)
Re: Binary File Load error?
by GrandFather (Saint) on Apr 13, 2006 at 05:08 UTC

    I would think that the load is fine, but using print to dump the content of the file seems somewhat dubious! What makes you thing that the content of $content is not what it ought to be?


    DWIM is Perl's answer to Gödel
Re: Binary File Load error?
by jesuashok (Curate) on Apr 13, 2006 at 05:05 UTC
    Hi

    I added binmode STDOUT and it works perfectly now.
    Try the same in your code. Thanks!

    "Keep pouring your ideas"

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (3)
As of 2024-04-19 21:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found