in reply to Re^5: getting a while loop to terminate
in thread getting a while loop to terminate
Well, I have yet to use the state feature myself, so I may not be the best judge of that, but in this case, it doesn't gain you anything. If you just instantiate $counter3 normally with my, it will be available to subroutines within the file already, without needing state. It won't hurt anything; it just has no particular effect here.
With regard to your logic for finding a new directory name and creating it, I would be concerned about a different kind of race condition. If the mkdir fails because of permissions, your next line deals with that with die. Otherwise it keeps incrementing the counter until it finds a name that can be created. But what if the mkdir fails for some other reason, like EROFS or ENOSPC? Your loop will continue forever, incrementing and trying to mkdir until you kill the program. That's why my version did the mkdir after my do/while loop, and only used the loop to find an available name. As others pointed out, you still need an error check on the mkdir, just in case some other process creates the directory in that split second between your loop selecting the name and mkdir making it, but that's simpler than trying to specifically catch all the possible errors that mkdir might throw.
The double return is awkward, partly because it should never be possible to trigger the second one. Your while loop can only be exited if $made is true, in which case the first return will be executed, or by die, in which case neither return will be reached. The second return is thus a superfluous line that cannot be reached and looks like a possible typo or something.
One last stylistic note: You don't need double quotes to interpolate a single variable, so these are equivalent:
my $filename = "$dir". "/image_". "$counter"; my $filename = $dir. "/image_". $counter; my $filename = "$dir/image_$counter";
Aaron B.
My Woefully Neglected Blog, where I occasionally mention Perl.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^7: getting a while loop to terminate
by aaron_baugher (Curate) on Apr 18, 2012 at 07:56 UTC | |
by Aldebaran (Curate) on Apr 19, 2012 at 02:49 UTC | |
by Anonymous Monk on Apr 19, 2012 at 04:17 UTC |