I interpreted single-character STX and ETX codes as being intrinsic to the problem. Maybe that is not so, however. Here is a multi-character solution:
use Modern::Perl;
my $STX = 'foo';
my $ETX = 'bar';
my $re = qr{ $STX (?: (?<match>.*?) $ETX | (?:(?<match>.{80}))) }x;
$_='foo12345678barfoo1234567890123456789012345678901234567'.
'890123456789012345678901234567890123456789012345678901234567890bar';
say substr($+{match},0,80) while (/$re/g);
(I added a substr() to limit the matched string to 80 characters. It appears to me that it's not trivial to meet these requirements entirely within the regex...though I'm sure others will quickly prove me wrong!)
When's the last time you used duct tape on a duct? --Larry Wall
|