in reply to Re^2: Testing the current directory with Cwd and File::Spec
in thread Testing the current directory with Cwd and File::Spec

Now, that may not be the best way, but I'd vote for it as easiest. :-)

Two comments.

First, File::chdir uses Cwd and File::Spec internally, which means it's potentially just as subject to the issues raised in the meditation. The Anonymous Monk was suggesting opening and saving the filehandle, not the directory name. That's quite a bit different and would be more robust to name issues. However, the meditation was about comparing the current directory to a desired one -- which in a test suite is specified by name, not filehandle, so that doesn't really help either.

Second, my hope is that people may find File::pushd to be even easier -- at least for the directory reverting part. Here's something like your first example with File::pushd -- no localization needed:

use Cwd; use File::pushd; print cwd; { my $dir = pushd('subdir'); print join("\n", glob '*'); } # back where we started print cwd; print join("\n", glob '*');

And a File::pushd version like your second example -- with no needing to manually change back to a saved directory:

use File::pushd; { my $wd = pushd(); chdir('subdir'); # do some work. } # automatically back in original dir

Where it really shines is with temporary directories that need to clean themselves up:

use File::pushd; { my $wd = tempd(); # do work in the temporary directory } # back in the original directory and the temporary directory is delete +d

-xdg

Code written by xdg and posted on PerlMonks is public domain. It is provided as is with no warranties, express or implied, of any kind. Posted code may not have been tested. Use of posted code is at your own risk.

Replies are listed 'Best First'.
Re^4: Testing the current directory with Cwd and File::Spec
by Celada (Monk) on Dec 06, 2005 at 05:45 UTC

    xdg,

    To your first comment, I agree that my reply about saving the filehandle instead of the name doesn't address the meditation you were actually pondering. It's more of a comment on my ideal of a cwd save and restore should work in general.

    To your second comment, I agree that the way it works within the framework of existing lexical scoping rules makes it nice and convenient.

    For tempd, it's too bad we can actually create an anonymous directory for this purpose (i.e. create it, change into it, and delete it while still being inside it). (Or even if there are some operating systems permit this, it's certainly not portable).