in reply to Re^3: create image via binmode
in thread create image via binmode

That's the same as my first post, except you added do which doubles the memory usage.

Replies are listed 'Best First'.
Re^5: create image via binmode
by strat (Canon) on Jan 15, 2006 at 10:21 UTC

    It's similar, but there are some differences (which may or may not be important):

    1. the local $/ has a very tight scope which may be important if you read additional files and don't want to get them in slurp mode.
    2. no global filehandles.
    3. a minimum of error handling
    4. filenames hardcoded only once

    well, you can also get point 1 with an ordinary block, e.g.

    my ($content, $IN); unless (open ($IN, "<", $file)) { die "Error in reading '$file': $!\n"; } # unless else { local $/ = undef; # valid only until end of block binmode($IN); $content = <$IN>; close ($IN); } # else
    or the like.

    Global filehandles have a problem: they are global, and if you open(IN, ...) and another IN is already opened, the first IN is closed. In some cases (e.g. recursions, reading filenames out of a file and opening them in a subroutine) this may be fatal.

    point 4 is in my eyes important that it is not good to write something like:

    unless (open ($IN, "<", "file1.txt")) { die "Error in reading 'file1.txt': $!\n"; } # unless
    because if the filename changes to something different, there is the danger you forget to change the filename in the die-message (or just do a stupid typo) and you or somebody else searches for the wrong problem

    Best regards,
    perl -e "s>>*F>e=>y)\*martinF)stronat)=>print,print v8.8.8.32.11.32"

      I agree with everything, and follow those practices myself. I just stopped reading after I read what I thought was the point of your post. ++'ed.