in reply to reading in fixed width

23+15=38 so "continuing on to position 28" doesn't make a lot of sense. Assuming that you meant (23,15) & (48,10), you could us unpack:

($1,$2) = unpack 'x23 A15 x10 a10', $var;

If you insist on using a regex, then with the same change of spec as above, you could use:

$var =~ m[^.{23}(.{15}}.{10}(.{10})];

Or if you really did mean overlapping bits then you could use substr

$1 = substr $var, 23, 15; $2 = substr $var, 28, 10;
or unpack
($1,$2) = unpack 'x23 a15 X10 a10', $var;

Or a regex:

$var =~ m[(?=.{23}(.{15}))(?=.{28}(.{10}))];

Of course, using named vars rather than $1 & $2 would make more sense :)


Examine what is said, not who speaks.
Silence betokens consent.
Love the truth but pardon error.