use v5.20; while () { chomp; say "$_ => '$1' x '$2'" if /x(.*)x((??{ ".{".length($1)."}" }))x/; } __DATA__ xaxxax xxx x.x.x x12x..x x123x...x x123x.x.x #### xxx => '' x '' x.x.x => '.' x '.' x12x..x => '12' x '..' x123x...x => '123' x '...' x123x.x.x => '123' x '.x.'