in reply to Re^2: How many loops are there in Perl?
in thread How many loops are there in Perl?
However, redo can take an argument (a block label) which makes it look much more goto-ish and less like elegant Perl. For example, we could redo (pun intended!) the example like this:{ print "Enter a number 0-9\n"; $number=<STDIN>; chomp($number); unless(length($number) == 1 && $number =~ /[0-9]/){ print "C'mon, man! give me a number 0-9!\n"; redo; } }
The biggest difference between redo and a pure goto is that redo must go to an enclosing block label whereas goto goes to any label. This is still a valid redo:GET_NUMBER:{ print "Enter a number 0-9\n"; $number=<STDIN>; chomp($number); unless(length($number) == 1 && $number =~ /[0-9]/){ print "C'mon, man! give me a number 0-9!\n"; redo GET_NUMBER; } }
my $number; PROMPT_FOR_NUMBER:{ print "Enter a number 0-9\n"; GET_NUMBER:{ $number=<STDIN>; chomp($number); unless(length($number) ==1 && $number =~ /[0-9]/){ print "You don't want to give me one number ?\n"; redo PROMPT_FOR_NUMBER; } } }
|
|---|