http://www.perlmonks.org?node_id=151263


in reply to Number of times I've used goto in Perl

I know this topic is all kinds of old, but, I have a very short script which checks if multiple servers are online. I also wanted it so that via optional command line options $loop (boolean) and $time (integer) it would loop until all the servers are online. At this point it would beep a lot.

Yet rather than putting all the code in a big evil while() loop, or in a big evil sub, I thought sticking this at the bottom seemed to make a lot more sense, both code shortness and clarity-wise.

goto START if ($loop && sleep($time||300));

tlhf
xxx
I had always knew gotos were bad. Now I know that you can never know anything ;)

Replies are listed 'Best First'.
Re^2: Number of times I've used goto in Perl
by JavaFan (Canon) on Jun 08, 2010 at 12:58 UTC
    In the case of long running daemons, I prefer to write that as:
    exec $0, @ARGV if $loop && sleep ($time || 300);
    Of course, that assumes you aren't collecting stats over multiple loops.

    The advantage of using exec instead of a goto (or loop), is that if there's a memory leak somewhere (be it in your script, a module or library you use, or a in perl itself), it will accumulate with a loop, but not with an exec.