use strict; use warnings; use Data::Dumper; while () { chomp; print Dumper decomp($_); } sub decomp { my @ret; @_ = split / /, $_[0]; for (my $i = 0; $i < $#_; $i += 2) { push @ret, [$_[$i], $_[$i+1], $_[$i+2]]; } return \@ret; } __DATA__ X -4 Y 3 Z W 1 X -4 Y 3 Z X 2 Y A -4 B -4 C -4 A -4 B