SPUG: Re: Using mkpath (was: HTTP::Cookies question)
dancerboy
dancerboy at strangelight.com
Fri Mar 1 12:41:52 CST 2002
At 7:03 am -0800 3/1/02, Richard Anderson wrote:
>No need to use eval, which introduces unneeded complexity and slows
>execution speed. File::Path::mkpath returns the number of directories
>successfully created, so the right way to call it is:
>
>use File::Path qw(mkpath);
>unless (mkpath($nameOfNewDir)) {
> die "Can't create directory $nameOfNewDir: $!";
>}
Huh?
1. The whole point of using eval{ } is so that the script WON'T die
if mkpath() fails.
2. In the above code, if mkpath() actually fails, your die
instruction will never get executed (because mkpath() will have
already croak'ed before Perl finishes evaluating the unless() clause).
3. mkpath() returns the directories actually *created* -- therefore,
the above code will die if $nameOfNewDir already exists (and since
this isn't an error condition, $! won't be set to anything
meaningful). To be accurate, you ought to rewrite the die message
something like this:
unless (mkpath($nameOfNewDir)) {
die "No new directories created. ($nameOfNewDir already exists?)";
}
But I doubt if this is really the program behaviour that you want.
4. eval{ } does not slow down program execution significantly.
(Don't confuse eval{ } with eval() -- the latter form takes a string,
and *is* slower, because it needs to compile the string. The former
form takes a code block and simply tells the compiler to handle fatal
errors inside that code block a non-fatal way.) Moreover, eval{ }
*is* the only mechanism for suppressing/capturing fatal errors.[*]
-jason
[*] At least, it's the only *reasonable* method. I mean, you could
fork off a child process and execute the code in the child (and
getting the result by opening pipes to the child's STDERR, e.g. using
IPC::Open3), or save the code into a file and execute it through qx{
}, or use any number of other utterly pathological techniques...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
POST TO: spug-list at pm.org PROBLEMS: owner-spug-list at pm.org
Subscriptions; Email to majordomo at pm.org: ACTION LIST EMAIL
Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
For daily traffic, use spug-list for LIST ; for weekly, spug-list-digest
Seattle Perl Users Group (SPUG) Home Page: http://seattleperl.org
More information about the spug-list
mailing list