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

I have a simple script but on the second input, the $name variable doesn't change and throws the while loop into an infinitive loop

my %PhoneNum = ( Carl => '111-1112', Dale => '333-3334', Ester => '555-5567', Frank => '777-6789', George => 999-0121 ); print "Please enter the name of the person whose phone number you wo +uld like to look up: "; chomp(my $name = <STDIN>); while ($name ne 'q') { if (exists $PhoneNum{$name}) { print "$name has the phone number: $PhoneNum{$name}\n"; } else { print "$name is not in the phone book\n"; } print "enter name or 'q' for quit: "; chomp(my $name = <STDIN>); print "\n\n\n My name is $name\n"; }

TIA The Catfish

Replies are listed 'Best First'.
Re: while loop not working
by choroba (Cardinal) on Dec 27, 2019 at 20:42 UTC
    You used my $name twice. It means the second $name is not the same as the first $name, it's a brand new variable whose value doesn't influence the value of the outer variable that's used to exit the loop.

    Just drop the "my" from the second assignment.

    map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]
      addendum: 'use warnings;' would have shown it.

      DB<27> use warnings; my $x;my$x "my" variable $x masks earlier declaration in same scope at

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

        It wouldn't as the variables have a different scope:
        perl -we 'my $x; while($x) { my $x }'

        map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]