in reply to (crazyinsomniac)Re: Any way to binmode
in thread Any way to binmode <>

what you want to binmode is ARGV
No, that doesn't work, because the binmode needs to be done before the first read.
  • Comment on Re: (crazyinsomniac)Re: Any way to binmode

Replies are listed 'Best First'.
Re: Re: (crazyinsomniac)Re: Any way to binmode
by crazyinsomniac (Prior) on Aug 02, 2001 at 19:52 UTC
    *sigh*, here is an example:
    FF: binmode ARGV; while(<>) { print } continue { if(eof) { close ARGV; goto FF; } }

    upate: i apologize, but you can always:

    FF: binmode ARGV; while(<>) { binmode ARGV; local $/; $a=<>; } continue { if(eof) { close ARGV; goto FF; } }

    UPDATE: well i was almost there, this is kind of stupid, but it'll work as you want it to;

    while(<>) { close ARGV; open ARGV, $ARGV or die $!.' '.$ARGV; binmode ARGV; binmode ARGV; local $/; print $_=<>; close BINMODE; }

     
    ___crazyinsomniac_______________________________________
    Disclaimer: Don't blame. It came from inside the void

    perl -e "$q=$_;map({chr unpack qq;H*;,$_}split(q;;,q*H*));print;$q/$q;"

      I know what you're saying, but it just doesn't work... this program:

      use Data::Dumper; $Data::Dumper::Useqq = 1; FF: binmode ARGV; while(<>) { print Dumper($_) } continue { if(eof) { close ARGV; goto FF; } } __END__ this is ctrl-Z:^Z # note: real ctrl-Z there this is past ctrl-z

      produces this output when run on itself under NT (line endings are \r\n):

      /ned $ perl binmode.pl binmode.pl $VAR1 = "use Data::Dumper;\n"; $VAR1 = "\$Data::Dumper::Useqq = 1;\n"; $VAR1 = "\n"; $VAR1 = "FF: binmode ARGV;\n"; $VAR1 = "while(<>)\n"; $VAR1 = "{ print Dumper(\$_) }\n"; $VAR1 = "continue\n"; $VAR1 = "{ if(eof)\n"; $VAR1 = " { close ARGV; goto FF; }\n"; $VAR1 = "}\n"; $VAR1 = "__END__\n"; $VAR1 = "this is ctrl-Z:";
        It does indeed work, its your shell that is translating the newlines. Try redirecting to a file.

        update i'm wrong, i aplogize, but you can always:

        while(<>) { binmode ARGV; seek ARGV,0,0; local $/ $_=<>; }
        UPDATE: well i was almost there, this is kind of stupid, but it'll work as you want it to;
        while(<>) { close ARGV; open ARGV, $ARGV or die $!.' '.$ARGV; binmode ARGV; binmode ARGV; local $/; print $_=<>; close BINMODE; }

         
        ___crazyinsomniac_______________________________________
        Disclaimer: Don't blame. It came from inside the void

        perl -e "$q=$_;map({chr unpack qq;H*;,$_}split(q;;,q*H*));print;$q/$q;"