Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^2: How many loops are there in Perl?

by AnomalousMonk (Abbot)
on Jan 31, 2012 at 07:03 UTC ( #950894=note: print w/ replies, xml ) Need Help??


in reply to Re: How many loops are there in Perl?
in thread How many loops are there in Perl?

... the naked-block isn't a loop ... without a label and goto[.]

Or at least a (possibly conditional) redo (see also Loop Control):

perl -wMstrict -le "my $i = 1; { print qq{in naked loop $i}; redo if $i++ < 3; } " in naked loop 1 in naked loop 2 in naked loop 3


Comment on Re^2: How many loops are there in Perl?
Download Code
Re^3: How many loops are there in Perl?
by adamcrussell (Hermit) on Jan 31, 2012 at 22:14 UTC
    I have always thought redo was cool. At first glance it doesn't look anything like a goto because it is usually used with bare blocks. The code below has redo going to the start of the nearest enclosing block.
    { 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; } }
    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:
    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; } }
    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:
    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; } } }
    <jc> Why do people persist in asking me stupid questions?
    <Petruchio> <insert mutually recursive response>
    --an exchange from #perlmonks on irc.slashnet.org(2 March 2009 1345 EST)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://950894]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others wandering the Monastery: (9)
As of 2015-07-04 10:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (59 votes), past polls