in reply to RE: Hex Embedded Images (5.004 is different)
in thread Hex Embedded Images

That's probably because you copied the code from my home node yesterday. I had binmode in the wrong place (after undef $/, not a good thing) and one thing probably lead to another. Is this what you have?
#!/usr/bin/perl open(IMG,'foo.gif') or die("Couldn't open image: $!\n"); binmode(IMG); undef($/); $image = <IMG>; $hex = unpack("H*", $image); close(IMG); while ($txt = substr($hex,0,32,'')) { print "'$txt'\n"; }


#!/home/bbq/bin/perl
# Trust no1!

Replies are listed 'Best First'.
RE: (3) Hex Embedded Images (missing something obvious?)
by ybiC (Prior) on Jun 28, 2000 at 20:48 UTC

    Yeah, I did copy it yesterday, but I still get this error:

    Too many arguments for substr at ./gif2hex.perl line 17, near "'')" Execution of ./gif2hex.perl aborted due to compilation errors.

    with today's code from your home node:

    #!/usr/bin/perl -w # Description: Hex embedded images sample # Date: June 28, 2000 # Author: bbq@zaz.com.br # URL: http://johnny.warp.psi.br/perl/images.pl?img=text open IMG, "./arrow.gif" or die "Couldn't open image: $!\n"; binmode(IMG); undef $/; $image = <IMG>; $hex = unpack("H*", $image); close IMG; while ($txt = substr($hex,0,32,'')) { print "'$txt'\n"; } # END

    Thanks for you help - hope I'm not missing something obvious.
    This is definately CUFP.
        ybiC

      You're getting this compilation error because you have an older version of Perl. I'm guessing Perl 5.004 or something? Or less, perhaps.

      That version of substr wasn't added until 5.005. In the docs:

      An alternative to using substr() as an lvalue is to specify the replacement string as the 4th argument. This allows you to replace parts of the EXPR and return what was there before in one operation, just as you can with splice().
      You'll probably have to make do w/ a two-step operation; first get the first 32 characters using substr, then strip the first 32 characters:
      while ($txt = substr($hex, 0, 32)) { substr($hex, 0, 32) = ""; print "'$txt'\n"; }
      See if that works for you.