T?mas gu?mundsson <[EMAIL PROTECTED]> wrote:
>
> I need help ( you figure ?)
>
> #!/usr/bin/perl
> use strict;
> use Cwd;
>
> my $phone_book = qw{
^
THat should be '@phone_book' (or '%phone_book', really.)
A list-in-scalar-context (my $var = qw/foo bar/;) evaluates to
the last element of the list.
So $phone_book contains the value "8901", and the rest of
your list is discarded.... generating a warning if you turn
on warnings:
$ perl -we '$foo = qw/foo bar/'
Useless use of a constant in void context at -e line 1.
Which is one more reason to use -w.
> Fred 0123
> John 4567
> Bill 8901
> };
> my $selection = 1;
> do {
> print "\n Please select one choice";
> print "\n 1. Enter name.";
> print "\n 2. Quit.\n";
>
> chomp(my $selection = <STDIN>);
You've already declared '$selection'.
When you declare a lexical variable (with 'my' or 'our'),
it will be visible for the rest of the enclosing scope.
And when you declare two variables with the same name, the second
one temporarily "hides" the first:
my $foo = 1;
{ # curlies create a new 'scope'
my $foo = 2;
print $foo; # 2
}
print $foo; # 1
If we make that into a do-while loop, we'll get the problem
you've encountered. The variable checked in the 'until'
expression is *not* the one declared inside the loop.
my $foo = 1;
do { my $foo = 2 } until $foo == 2; # infinite loop:
# this is the OUTER $foo,
# which is always 1.
So you should use:
chomp ($selection = <STDIN>);
> if ($selection eq "1") {
> chomp(my $number = <STDIN>);
> print "$number number is : $phone_book \n"
Looks like you want to take a name from STDIN, and look up the
associated phone-number. And any time you are thinking of
'looking something up', phonebook style, you want a %hash.
my %phone_book = qw( Fred 0123 John 4567 Bill 8901 );
And then to do the lookup:
print "$number number is : $phone_book{$number}.\n";
> }
> } until ($selection eq "2");
HTH
--
Steve
perldoc -qa.j | perl -lpe '($_)=m("(.*)")'
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]