my $binary = pack 'F*', (3.141592) x 10; # make binary vector of length 80 bytes my $string = '...blah...' . $binary . '...blah...'; my ($fiop, $length, $data) = $string =~ m{ # end: start file tag ((??{ "\\C{$2}" })) # self modifying regex for binary stuff # end: file tag }sx; print "$fiop, $length (data comes below)\n"; print join ',', unpack("F*", $data); # extract binary data again (my $notags = $string) =~ s{}{}; print "\n$notags\n";