in reply to working with a database

This is your problem     if (exists $phonebook{$name}){

You should ask the database if $name exists, not %phonebook

I would look into an ORM Class::DBI vs. DBIx::Class, Perl ORM comparison (Class::DBI vs. DBIx::Class vs. Rose::DB::Object)