Under all the versions of Perl on VMS I have available, including 5.8.7
using the latest PathTools 3:24 all of the following print 1.

perl -e "use File::Spec;print scalar(File::Spec->splitdir(''))"
perl -e "use File::Spec;print scalar(File::Spec->splitdir())"
perl -e "use File::Spec;print scalar(File::Spec->splitdir(undef))"

The single element is an empty scalar.

I'm thinking I should be getting a 0 back, an empty array.  (I get 0
back from Win, Cygwin and Linux, I don't have access to a Mac, but I
suspect from looking at the code it will explicitly return the same as
VMS does?)

Is this a bug (in VMS.pm) or might this be desired behaviour?

>From the docs:

>> Unlike just splitting the directories on the separator, empty
>> directory names (C<''>) can be returned, because these are significant
>> on some OSes.

If it's a bug then this edit works for me, and all the unit tests still
pass.

PathTools-3_24/lib/File/Spec/VMS.pm
******
  263       $dirspec =~ tr/<>/[]/;                      # < and >
==> [ and ]
******
  263       return () if ( (!defined $dirspec) || ('' eq $dirspec) );
  264       $dirspec =~ tr/<>/[]/;                      # < and >
==> [ and ]
******

I couldn't fit a test for this into the spec.t file in an elegant way,
so here is a quick edit to test this:

PathTools-3_24/t/spec.t
******
  626
  627
  628   plan tests => scalar @tests;
  629
******
  626   plan tests => 1 + scalar @tests;
  627
  628   my @got = File::Spec::VMS->splitdir('');
  629   my $got = scalar @got;
  630   ok $got, 0, "scalar(File::Spec::VMS->splitdir(''))";
  631
******

Thanks for your thoughts,

Peter (Stig) Edwards

Reply via email to