#!/lusr/bin/perl use warnings; use strict; my %addressbook; if (defined $ARGV[0]){ process_file($ARGV[0]); }else { print "Currently, the address book contains 0 entry.\n"; } while (1){ menu(); chomp(my $answer = ); if (lc($answer) eq "1" || lc($answer) eq "ao"){ add_one(); }elsif (lc($answer) eq "2" || lc($answer) eq "aa"){ add_all(); }elsif (lc($answer) eq "3" || lc($answer) eq "do"){ delete_one(); }elsif (lc($answer) eq "4" || lc($answer) eq "da"){ delete_all(); }elsif (lc($answer) eq "5" || lc($answer) eq "vo"){ view_one(); }elsif (lc($answer) eq "6" || lc($answer) eq "va"){ view_all(); }elsif (lc($answer) eq "7" || lc($answer) eq "e" || lc($answer) eq "q"){ exit(0); } my $size = scalar(keys %addressbook); print "Currently, the address book contains $size "; ($size == 1) ? print("entry.\n") : print("entries.\n"); } sub menu { print <); print "Address: "; chomp(my $address = ); print "Phone: "; chomp(my $phone = ); return ($name, $address, $phone); } sub add_content { my($name, $address, $phone) = @_; $addressbook{$name} = { address => $address, phone => $phone }; } sub add_all { print "Enter filename: "; chomp(my $filename = ); process_file($filename); } sub process_file { my $filename = shift; open(INFILE, '<', $filename) or die("Can not open $filename: $!\n"); my $count = 0; while (){ chomp; my ($name, $address, $phone) = split(/:/, $_); if (exists $addressbook{$name}){ print "$name already exists in the address book!\n"; } add_content($name, $address, $phone); $count++; } close(INFILE); print "$count name(s) in $filename are added!\n"; } sub delete_one { print "Enter name to delete: "; chomp(my $name = ); if (exists $addressbook{$name}){ delete $addressbook{$name}; } else { print "$name is not in the address book!\n\n"; } } sub delete_all { print "Do you really want to delete all names? (Y[es]/N[o]): "; chomp(my $answer = ); if (uc($answer) eq "YES" || uc($answer) eq "Y"){ foreach my $name (keys %addressbook) { delete $addressbook{$name}; } } } sub view_one { print("Enter name to view: "); chomp(my $name = ); if (exists $addressbook{$name}){ print_one($name); } else { print "$name is not in address book!\n\n"; } } sub view_all { foreach my $name (sort keys %addressbook) { print_one($name); } } sub print_one { my $name = shift; print "Name: $name\n"; print "Address: $addressbook{$name}{address}\n"; print "Phone: $addressbook{$name}{phone}\n\n"; }