my @Files; my %Table; while (my $FName = shift) { push @Files, $FName; # open spreadsheet & get worksheet, as shown in Spreadsheet::ParseExcel docs for my $row ($row_min .. $row_max) { my $category = $worksheet->get_cell($row, 0); # first column has category my $value = $worksheet->get_cell($row, 1); # second column has value $Table{$category}[@Files] = $val; # Store into slot in table } } #### @Files = ('file1', 'file2'); %Table = ( # Cat file1 file2 'A' => [ 12, 34 ], 'B' => [ 152, 567 ], );