use 5.010; use strict; use warnings; my $head_line = ; my @c_idx; while ($head_line =~ /\S+/g) { push @c_idx, $-[0]; } my $sep = ; # ignored; while () { chomp; my @columns; for my $idx (0..$#c_idx) { if ($idx == $#c_idx) { push @columns, substr $_, $c_idx[$idx]; } else { push @columns, substr $_, $c_idx[$idx], $c_idx[$idx+1] - $c_idx[$idx]; } } use Data::Dumper; print Dumper \@columns; } __DATA__ Mod Sub-Module Model Serial ---- --------------------------- ------------------ ----------- 1 Distributed Forwarding Card WS-F6700-DFC3CXL SAL1434RLPY 3 7600 ES+ DFC XL 7600-ES+3CXL JAE14520N29 3 7600 ES+T 20x1GE SFP 76-ES+T-20GQ JAE145301XM 5 Policy Feature Card 3 7600-PFC3CXL JAE14330E6J 5 C7600 MSFC4 Daughterboard 7600-MSFC4 JAE14320QBE 6 Policy Feature Card 3 7600-PFC3CXL JAE14330EAO 6 C7600 MSFC4 Daughterboard 7600-MSFC4 JAE14320QA8 7 Distributed Forwarding Card WS-F6700-DFC3CXL SAL1433QHBR 8 Distributed Forwarding Card WS-F6700-DFC3CXL SAL1433QXF9