Adam Jimerson wrote:
I am working on a program that will act as a contact manager of sorts, it uses two hashes to store everything (although the second one is commented out because I am not ready to work with it). I am using the format function to display everything but I don't know how to get it to show the keys to the hash which is where the names are. Here is my code so far to show what I am talking about:

,----[ CODE ]
#!/usr/bin/perl
use warnings;
use strict;

#define hashes
my %phone_numbers = ();
#my %email_address = ();
my $full_name;
my $phone_number;

print "CSCC Workstudy/Co-Op/Intern Contact Manager\n";
print "Version 0.6\n";

if ("@ARGV" eq 'add') {

That should be:

if ($ARGV[0] eq 'add') {


dbmopen(%phone_numbers, "$ENV{HOME}/phone_numbers", 0766) || die "Can't open database: $!\n"; #Open database for writing

perldoc -f dbmopen
    dbmopen HASH,DBNAME,MASK
            [This function has been largely superseded by the "tie"
            function.]

perldoc -f tie
perldoc AnyDBM_File
perldoc DB_File
perldoc GDBM_File
perldoc NDBM_File
perldoc ODBM_File
perldoc SDBM_File


        print "\nFull Name: ";
        chomp($full_name = <STDIN>);
        print "Phone Number: ";
        chomp($phone_number = <STDIN>);
        $phone_numbers { $full_name } = $phone_number;
dbmclose(%phone_numbers) || die "Can't close database $!\n"; #saves and closes the database
        exit 0;
} elsif ("@ARGV" eq 'view') {
dbmopen(%phone_numbers, "$ENV{HOME}/phone_numbers", 0666) || die "Can't open database: $!\n"; #Open database for reading
        foreach (keys %phone_numbers) {
                 write;
        }
        exit 0;
} else {
        die "Usage: $0 [add|view]\n";
}

format STDOUT =
@<<<<<<<<<<<<<<< @##-###-####

@##-###-#### is not a valid format string, that is a three digit number followed by the literal string '-###-####'.


$phone_numbers{$_} #needs to print the keys of the hash for the name, and values for the phone number so it will be like this "Some Name 555-555-5555"
.

format STDOUT_TOP =
Full Name Phone Numbers
========= =============
.

You probably want something more like this:

#!/usr/bin/perl
use warnings;
use strict;
use DB_File;

print "CSCC Workstudy/Co-Op/Intern Contact Manager\n",
      "Version 0.6\n";

@ARGV == 1 or die "Usage: $0 [add|view]\n";

# define hashes
tie my %phone_numbers, 'DB_File', "$ENV{HOME}/phone_numbers"
    or die "Can't open $ENV{HOME}/phone_numbers: $!\n";
#tie my %email_address, 'DB_File', "$ENV{HOME}/email_address"
#    or die "Can't open $ENV{HOME}/email_address: $!\n";

if ( $ARGV[ 0 ] eq 'add' ) {
    print "\nFull Name: ";
    chomp( my $full_name = <STDIN> );
    print "Phone Number: ";
    chomp( my $phone_number = <STDIN> );
$phone_numbers{ $full_name } = join '-', $phone_number =~ /(\d{3})\D*(\d{3})\D*(\d{4})$/;
}
elsif ( $ARGV[ 0 ] eq 'view' ) {
    for ( keys %phone_numbers ) {
        write;
    }
}

format STDOUT_TOP =
Full Name Phone Numbers
========= =============
.

format STDOUT =
@<<<<<<<<<<<<<<< @>>>>>>>>>>>
$_, $phone_numbers{$_}
.

untie %phone_numbers;
exit 0;

__END__



John
--
Those people who think they know everything are a great
annoyance to those of us who do.        -- Isaac Asimov

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to