use strict; use warnings; require 5.8.0; my $string = "......bytes...."; local $/=\1; open FH, "<", \$string or die $!; while (my $byte = <FH> ) { #do your stuff with $byte } close FH;
It relies on the fact that setting the $/ input separator to a numeric value reads in that number of bytes. It also relies on the Perl 5.8.0 or later "In-memory file" open, where you can essentially open a scalar instead of a file. You then read the scalar in byte by byte.
I wouldn't recommend it for much, but it's an interesting exercise.
Update: Thanks Anonymous Monk for catching the glitch. I knew I was forgetting something. My original code read: local $/=1;. I've now corrected my snippet.
Update 2: After some testing and re-reading the appropriate documentation, it appears that this method will work, as long as you're using it on Perl 5.8.0 or later.
Dave
In reply to Re: How do I safely, portably extract one or more bytes from a string?
by davido
in thread How do I safely, portably extract one or more bytes from a string?
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |