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