use strict; use warnings; use Data::Dumper; my %config = map { /^((?:inc|exc)_\w+)=(.*)$/; ( $1, [ split(/\s*;\s*/,$2) ] ) } ; print Dumper(\%config); __DATA__ inc_albums=a; list; of; albums; to; include inc_genres=a; list; of; genres; to; include inc_artists=a; list; of; artists; to; include inc_songs=a; list; of; songs; to; include inc_year=a; list; of; years; to; include exc_albums=a; list; of; albums; to; exclude exc_genres=a; list; of; genres; to; exclude exc_artists=a; list; of; artists; to; exclude exc_songs=a; list; of; songs; to; exclude exc_year=a; list; of; years; to; exclude