summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/File/Spec/VMS.pm3
-rw-r--r--vms/ext/filespec.t17
2 files changed, 11 insertions, 9 deletions
diff --git a/lib/File/Spec/VMS.pm b/lib/File/Spec/VMS.pm
index f21ff5ecee..54fcee15ec 100644
--- a/lib/File/Spec/VMS.pm
+++ b/lib/File/Spec/VMS.pm
@@ -164,6 +164,7 @@ sub canonpath {
$path =~ s/([\[<])(-+)/$1 . "\cx" x length($2)/e; # encode leading '-'s
$path =~ s/([\[<\.])([^\[<\.\cx]+)\.-\.?/$1/g; # bar.-.foo ==> foo
$path =~ s/([\[<])(\cx+)/$1 . '-' x length($2)/e; # then decode
+ $path =~ s/^[\[<\]>]{2}//; # []foo ==> foo
return $path;
}
}
@@ -211,7 +212,7 @@ VMS-syntax file specification.
sub catfile {
my ($self,@files) = @_;
- my $file = pop @files;
+ my $file = $self->canonpath(pop @files);
@files = grep($_,@files);
my $rslt;
if (@files) {
diff --git a/vms/ext/filespec.t b/vms/ext/filespec.t
index 7123ffc51c..559659f2af 100644
--- a/vms/ext/filespec.t
+++ b/vms/ext/filespec.t
@@ -18,16 +18,17 @@ plan(tests => scalar(2*@tests)+6);
foreach $test (@tests) {
($arg,$func,$expect) = split(/\s+/,$test);
+ $expect = undef if $expect eq 'undef';
$rslt = eval "$func('$arg')";
- is($@, '', "eval func('$arg')");
- is($rslt, $expect, " result");
+ is($@, '', "eval ${func}('$arg')");
+ is($rslt, $expect, "${func}('$arg'): '$rslt'");
}
$defwarn = <<'EOW';
# Note: This failure may have occurred because your default device
# was set using a non-concealed logical name. If this is the case,
# you will need to determine by inspection that the two resultant
-# file specifications shwn above are in fact equivalent.
+# file specifications shown above are in fact equivalent.
EOW
is(uc(rmsexpand('[]')), "\U$ENV{DEFAULT}", 'rmsexpand()') || print $defwarn;
@@ -86,9 +87,9 @@ __down_:[__the_.__garden_.__path_] fileify __down_:[__the_.__garden_]__path_
__down_/__the_/__garden_/__path_ fileify __down_/__the_/__garden_/__path_.dir;1
__down_:[__the_.__garden_]__path_ fileify __down_:[__the_.__garden_]__path_.dir;1
__down_:[__the_.__garden_]__path_. fileify # N.B. trailing . ==> null type
-__down_:[__the_]__garden_.__path_ fileify
+__down_:[__the_]__garden_.__path_ fileify undef
/__down_/__the_/__garden_/__path_. fileify # N.B. trailing . ==> null type
-/__down_/__the_/__garden_.__path_ fileify
+/__down_/__the_/__garden_.__path_ fileify undef
# and pathifying them
__down_:[__the_.__garden_]__path_.dir;1 pathify __down_:[__the_.__garden_.__path_]
@@ -97,15 +98,15 @@ __down_:[__the_.__garden_]__path_.dir;1 pathify __down_:[__the_.__garden_
__down_/__the_/__garden_/__path_.dir pathify __down_/__the_/__garden_/__path_/
__down_:[__the_.__garden_]__path_ pathify __down_:[__the_.__garden_.__path_]
__down_:[__the_.__garden_]__path_. pathify # N.B. trailing . ==> null type
-__down_:[__the_]__garden_.__path_ pathify
+__down_:[__the_]__garden_.__path_ pathify undef
/__down_/__the_/__garden_/__path_. pathify # N.B. trailing . ==> null type
-/__down_/__the_/__garden_.__path_ pathify
+/__down_/__the_/__garden_.__path_ pathify undef
__down_:[__the_.__garden_]__path_.dir;2 pathify #N.B. ;2
__path_ pathify __path_/
/__down_/__the_/__garden_/. pathify /__down_/__the_/__garden_/./
/__down_/__the_/__garden_/.. pathify /__down_/__the_/__garden_/../
/__down_/__the_/__garden_/... pathify /__down_/__the_/__garden_/.../
-__path_.notdir pathify
+__path_.notdir pathify undef
# Both VMS/Unix and file/path conversions
__down_:[__the_.__garden_]__path_.dir;1 unixpath /__down_/__the_/__garden_/__path_/