Re: Perl 5.12: Problems with VMS file name processing
[email protected] ("Craig A. Berry") Fri, 16 Jul 2010 18:08:19 -0500
| Newsgroups | perl.vmsperl |
|---|---|
| Message-ID | <[email protected]> |
On Apr 24, 2010, at 8:18 AM, Craig A. Berry wrote: > > On Apr 23, 2010, at 11:37 AM, [email protected] wrote: > >> here is another reproducer for a 5.12 problem (this might be >> something for >> Robert). The following little script fails: >> >> use File::Copy; >> >> my $from = 'sys$login:from.lis'; >> my $to = 'sys$login:to.lis'; >> >> system("create/fdl=nl: $from") ; >> copy($from, $to) || warn ("Copy failed:", $!); >> >> The failiure condition is that the file spec does not contain an >> explicit >> directory spec (i.e. dsa0:[zinser]to.lis works). > > Hmm. What does this give you with 5.8.6: > > $ perl -"MFile::Spec" -e "print File::Spec->catpath('foo:', q(), > 'bar');" > foo:[]bar Carl Friedberg reminds me that this is still out there tripping people up. Here's what I just wrote him about it. I hope we get the fix into File::Spec at some point, but I don't know when that will be: I think what it boils down to (as I posted on-list at some point) is this: $ perl -"MFile::Spec" -e "print File::Spec->catpath('foo:', q(), 'bar');" foo:[]bar File::Copy is using catpath, so when there is a zero-length directory spec, it defaults in the double brackets. It can probably be fixed by patching catpath like so: --- lib/File/Spec/VMS.pm;-0 2010-07-15 23:37:15 -0500 +++ lib/File/Spec/VMS.pm 2010-07-16 17:29:15 -0500 @@ -759,6 +759,7 @@ sub catpath { $dir = vmspath($dir); } } + $dir = '' if $dir eq '[]' || $dir eq '<>'; "$dev$dir$file"; } [end] This is relatively untested, so do be careful. I haven't thought of anything else that will break, but the number of things I"m capable of thinking of is relatively small compared to the number of things that might break. The reproducer for your problem is as simple as: $ perl -"MFile::Copy" -e "copy('sys$help:DECRAM$HELP.HLB', 'sys $login:temp.hlb') or die $!;" error in directory name at -e line 1. %RMS-F-DIR, error in directory name but this does work after the patch above. ________________________________________ Craig A. Berry mailto:[email protected] "... getting out of a sonnet is much more difficult than getting in." Brad Leithauser