my %known_formats = ( 'format1', [ [qw[ meal drink cost ]], '(.+)\s\"(.+)\"\s(.+)\s(\d{1,2})' ] ); for my $format ( keys %known_formats ){ my $re = $known_formats{$format}[1]; my $fields = $known_formats{$format}[0]; $dockets{$docket_cnt}{@$fields} = $line =~ /$re/; }