use Parse::FixedLength; $phone_number=8037814191; parse_FL($phone_number, \%moms_phone, [ {'area_code' => 3}, {'exchange' => 3}, {'number' => 4} ] ); for (keys %moms_phone) { print $_, " ", $moms_phone{$_}, $/; } # yields $moms_phone{area_code} == 803 # $moms_phone{exchange} == 781 # $moms_phone{number} == 4191