use warnings; use strict; # remember that a byte consists of 2 nibbles and each nibble can be represented as an ASCII character within the stream. my $stream = '0123??6789??????'; my $lastValidByteIndex; for my $byteIndex (0 .. length($stream)/2-1) { my $byte = substr($stream, $byteIndex*2, 2); $lastValidByteIndex = $byteIndex unless $byte eq '??'; } if (defined($lastValidByteIndex)) { print "last valid byte is at index $lastValidByteIndex\n"; } else { print "There is no valid data in the stream\n"; }