Hi Jonathan, Argh, really stupid mistake by me. ) But let's use it to explain some points a bit further, shall we? A skilled craftsman knows his tools well, and Perl programmer (with CPAN as THE collection of tools of all sizes and meanings) has an advantage here: even if documentation is a bit vague about what's going on, we are (usually) able to check the code itself to find the answers. )
By browsing File::Spec source (found via 'Source' link within the 'File::Spec' page at CPAN)... http://cpansearch.perl.org/src/SMUELLER/PathTools-3.33/lib/File/Spec.pm ...we soon discover that this module is essentially an adapter for modules like File::Spec::Unix, File::Spec::Mac, File::Spec::Win32 etc. So our search goes on (as your mention of .DS_Store file implies) over there: http://cpansearch.perl.org/src/SMUELLER/PathTools-3.33/lib/File/Spec/Mac.pm Now we may either check the documentation (which clearly states that only the last argument to catfile is considered a filename, and all the others will be concatenated with catdir), or look right into the code - and come to the same conclusion: sub catfile { my $self = shift; return '' unless @_; my $file = pop @_; return $file unless @_; my $dir = $self->catdir(@_); $file =~ s/^://s; return $dir.$file; } So what should we do now? ) Of course, give milk to our cat... and arguments to File::Spec's catfile! ) Like this: File::Spec->catfile($path, $dircontents . '.md5') ... or this... File::Spec->catfile($path, "$dircontents.md5") (check 'variable interpolation in Perl' to see why it's possible - and why this is essentially the same as previous codeline) ... or even this ... File::Spec->catfile($path, join '.', $dircontents, 'md5') (but that would be a bit overkill, of course :) Speaking of overkills: you used regex (=~ /^\./) to check whether the line begins with a dot - or not. ) It's ok for this task, but you probably should know that these checks may be also done with (substr($line, 0, 1) eq '.') code, which will be a bit (up to 30% at my PC when Benchmark'ed) faster. -- iD 2011/12/30 Jonathan Harris <jtnhar...@googlemail.com> > I tried to use your suggestion > open my $wr_fh, '>', File::Spec->catfile($path, $dircontents, '.md5') or > die $!, $/ > but it returned an error on the command line: > 'Not a directory' > At which point the program dies (which is what it is supposed to do!) > I used it inside the loop - sorry to bug you for clarification > > > #### > if ($dircontents=~/^\./ || -d $dircontents) { > next; > } > > This is also to avoid the file .DS_Store > >