use Parse::FixedDelimiter; $phone_number=803-781-4191; Parse::FixedDelimiter::parse($phone_number, \%moms_phone, '-', [ 'area_code', 'exchange', 'number' ]); for (keys %moms_phone) { print $_, " ", $moms_phone{$_}, $/; } # yields $moms_phone{area_code} == 803 # $moms_phone{exchange} == 781 # $moms_phone{number} == 4191