use strict; use warnings; use Data::Dumper; my $data; # Modifying $/ in a limited context to avoid # affecting other areas of the code. { local $/; $data = ; } # # Create the regular expression using qr{}x as it makes # the pattern much easier to follow (and maintain) # my $pattern = qr{ (\d+-) (\d+-) (\d+) (\s*/\s*) (\d+) (\s*/\s*) (\d+) }x; my @list; while ($data =~ /$pattern/g) { push @list,[$1,$2,$3,$4,$5,$6,$7]; } print Dumper \@list; __DATA__ PART NAME QUANTITY SECTION/FIGURE/ITEM Widget1 1 72-33-00/ 23/ 85 Widget1 1 75-20-00/ 11/ 10 Widget2 1 72-33-00/20/10 Widget2 1 72-33-00/20/70 Widget2 1 72-00-33/2/1 Widget2 1 72-00-33/2/20 Widget2 1 73-12-00/4/1 Widget2 1 73-12-00/4/220 Widget2 1 73-12-00/3/10 Widget2 2 79-20-00/9/1 Widget2 1 79-20-00/5/1