как со строкой: s#^\s+##; s#\s+$##; s#\s+# #g;
upd:
DB<2> p join",",map { defined($_)?$_:"undef" } @a
undef,undef,1,2,3,undef,undef,undef,4,undef,5,undef,undef,6,undef,undef
DB<3> my ($a,$b) = (0,0); map { defined($_) ? ($a++,$b=0) : ($b++&&splice@a,$a++,1) } @a
DB<4> defined($a[0])||splice@a,0,1
DB<5> defined($a[$#a])||splice@a,$#a,1
DB<6> p join",",map { defined($_)?$_:"undef" } @a
1,2,3,undef,4,undef,5,undef,6
upd:
map { defined($_) ? ($a++,$b=0) : ($b++?splice@_,$a,1:$a++); } @_;