On Aug 7, 2013, at 12:23 PM, Nicholas Clark <n...@ccl4.org> wrote: > I have this commit pushed to a smoke-me branch. It doesn't cause any test > failures on the HP VMS testdrive system. Am I making bad assumptions? > > Specifically, is it filesystem dependant whether this code as-is will pass? > > open(H,'run/fresh_perl.t'); # must be in the 't' directory > stat(H); > print "ok\n" if (-e _ and -f _ and -r _); >
I can't think of any reason that would be different on different filesystems. > I infer that it must have failed 12 years ago, because the last line was > "corrected" to > > print "ok\n" if (-e _ and -f _); > > > But what changed to cause it to work now? > There have been various fixes to stat as well as to Perl_cando_by_name in vms/vms.c. None I've managed to stumble on in the archives pops out as obviously "the one," and it would be arduous to do a manual bisect without git. > > Nicholas Clark > > > commit 219b23a016e4d19b9fc29d2cb6aad7c8f485e7bc > Author: Nicholas Clark <n...@ccl4.org> > Date: Wed Aug 7 11:57:09 2013 +0200 > > Remove the two "VMS adjustments" from test.pl's _fresh_perl > > These were added by commit ed6b3797850720f7 ("make t/op/misc.t work on > VMS") > in Jan 2001 back when the relevant code was in t/op/misc.t > > The two adjustments each only applied to one test. > > Was: system './perl -ne "print if eof" /dev/null' > Became: system './perl -ne "print if eof" NL:' > > Was: print "ok\n" if (-e _ and -f _ and -r _); > Became: print "ok\n" if (-e _ and -f _); > > The latter had the comment "VMS file locking". > > It seems that neither is needed now. Perl will recognise "/dev/null" as > the null device, and -r returns true on a file opened for reading. > > The "adjustments", particularly the second, should have been done all along > in the code for the test itself, not by complicating the test runner. > > diff --git a/t/test.pl b/t/test.pl > index 89c1d4d..3662aa6 100644 > --- a/t/test.pl > +++ b/t/test.pl > @@ -848,16 +848,6 @@ sub _fresh_perl { > $runperl_args->{stderr} = 1 unless exists $runperl_args->{stderr}; > > open TEST, ">$tmpfile" or die "Cannot open $tmpfile: $!"; > - > - # VMS adjustments > - if( $is_vms ) { > - $prog =~ s#/dev/null#NL:#; > - > - # VMS file locking > - $prog =~ s{if \(-e _ and -f _ and -r _\)} > - {if (-e _ and -f _)} > - } > - > print TEST $prog; > close TEST or die "Cannot close $tmpfile: $!"; > I think these changes are sane. Once upon a time, the CRTL did not support /dev/null as an alias for the native _NLA0:. I forget when /dev/null became supported; possibly v7.0, which was about 1995 or so. I remember Chuck Lane, who wrote the misc.t patch, saying at some point that he was running v6.2, which was already somewhat old at the time. I explicitly removed support for pre-7.0 VMS systems in Perl 5.16.x, so the /dev/null workaround seems safe to remove. I think I disagree about whether these belonged in the test runner; that actually was the general place to solve a general problem, even if there weren't other extant tests that exercised the problem. But those problems don't seem to be there now, so thanks for cleaning up after us. ________________________________________ Craig A. Berry mailto:craigbe...@mac.com "... getting out of a sonnet is much more difficult than getting in." Brad Leithauser