#!/usr/bin/perl -- use strict; use warnings; use Data::Dump qw/ dd /; for my $many ( 1..4 ){ my $s = "a\n".("\n" x $many )."\nb"; dd( $s ); while( $s =~ m{^(\s*?)$}gm ){ my $pos = pos( $s ); my $one = defined $1 ? $1 : ''; my $len = length $one; my $start = $-[0]; # @- my $lend = $+[0]; # @+ print "s($start)e($lend)pos($pos)len($len) "; dd( ( "".substr $s, 0, $pos - $len), ( "".substr $s, $pos-$len, $len ), ( "".substr $s, $pos ) ); } } __END__ "a\n\n\nb" s(2)e(2)pos(2)len(0) ("a\n", "", "\n\nb") s(2)e(3)pos(3)len(1) ("a\n", "\n", "\nb") s(3)e(3)pos(3)len(0) ("a\n\n", "", "\nb") "a\n\n\n\nb" s(2)e(2)pos(2)len(0) ("a\n", "", "\n\n\nb") s(2)e(3)pos(3)len(1) ("a\n", "\n", "\n\nb") s(3)e(3)pos(3)len(0) ("a\n\n", "", "\n\nb") s(3)e(4)pos(4)len(1) ("a\n\n", "\n", "\nb") s(4)e(4)pos(4)len(0) ("a\n\n\n", "", "\nb") "a\n\n\n\n\nb" s(2)e(2)pos(2)len(0) ("a\n", "", "\n\n\n\nb") s(2)e(3)pos(3)len(1) ("a\n", "\n", "\n\n\nb") s(3)e(3)pos(3)len(0) ("a\n\n", "", "\n\n\nb") s(3)e(4)pos(4)len(1) ("a\n\n", "\n", "\n\nb") s(4)e(4)pos(4)len(0) ("a\n\n\n", "", "\n\nb") s(4)e(5)pos(5)len(1) ("a\n\n\n", "\n", "\nb") s(5)e(5)pos(5)len(0) ("a\n\n\n\n", "", "\nb") "a\n\n\n\n\n\nb" s(2)e(2)pos(2)len(0) ("a\n", "", "\n\n\n\n\nb") s(2)e(3)pos(3)len(1) ("a\n", "\n", "\n\n\n\nb") s(3)e(3)pos(3)len(0) ("a\n\n", "", "\n\n\n\nb") s(3)e(4)pos(4)len(1) ("a\n\n", "\n", "\n\n\nb") s(4)e(4)pos(4)len(0) ("a\n\n\n", "", "\n\n\nb") s(4)e(5)pos(5)len(1) ("a\n\n\n", "\n", "\n\nb") s(5)e(5)pos(5)len(0) ("a\n\n\n\n", "", "\n\nb") s(5)e(6)pos(6)len(1) ("a\n\n\n\n", "\n", "\nb") s(6)e(6)pos(6)len(0) ("a\n\n\n\n\n", "", "\nb")