kapoor has asked for the wisdom of the Perl Monks concerning the following question:

%elective = ( '2cpr2b' => 'c', '1unx1b' => 'unix', '3sh' => 'shell', '4pl' => 'perl' ); foreach $v (sort( values(%elective))){ print "$v\n"; } print "\n"; print "User taking which course code\n"; foreach $k (keys(%elective)) { print "$k\n"; } @k = keys(%elective); print "@k\n"; print "\nAsking user which he/she taking: "; if (@k == <stdin>) { print "You will be taking the shell prog course\n"; } else { print "No course taken\n"; }

Question: When I run the script and enter correct "key" from hash the output I get is "No course taken", so I am doing some mistake in the "if" statement. What I want to check is "keys" entered from hash are displaying correct print message from (if/else) statement. Please assist, thanks!!!

Replies are listed 'Best First'.
Re: Simple Hash Usage
by almut (Canon) on Feb 25, 2010 at 02:38 UTC
    print "\nAsking user which he/she taking: "; my $choice = <STDIN>; chomp($choice); if (exists $elective{$choice} ) { print "You will be taking the $elective{$choice} prog course\n"; } else { print "No course taken\n"; }

    When you evaluate an array in scalar context (@k == <stdin>), you'll get the number of its elements, i.e. 4 in this case.

Re: Simple Hash Usage
by toolic (Bishop) on Feb 25, 2010 at 02:47 UTC

      Thanks a lot almut, toolic, it works, I do use strict and warnings, but did not used in this script.