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 #### use strict; use warnings; use Data::Dumper; my %config; foreach my $line () { if($line =~ m/^(\w+)\s*=\s*(.*?)\s*$/) { $config{$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 #### $VAR1 = { 'inc_genres' => [ 'a', 'list', 'of', 'genres', 'to', 'include' ], 'inc_year' => [ 'a', 'list', 'of', 'years', 'to', 'include' ], 'exc_albums' => [ 'a', 'list', 'of', 'albums', 'to', 'exclude' ], 'inc_albums' => [ 'a', 'list', 'of', 'albums', 'to', 'include' ], 'exc_year' => [ 'a', 'list', 'of', 'years', 'to', 'exclude' ], 'exc_songs' => [ 'a', 'list', 'of', 'songs', 'to', 'exclude' ], 'inc_artists' => [ 'a', 'list', 'of', 'artists', 'to', 'include' ], 'inc_songs' => [ 'a', 'list', 'of', 'songs', 'to', 'include' ], 'exc_artists' => [ 'a', 'list', 'of', 'artists', 'to', 'exclude' ], 'exc_genres' => [ 'a', 'list', 'of', 'genres', 'to', 'exclude' ] };