Peter Prymmer wrote:
"Craig A. Berry" <craigbe...@mac.com> wrote on 01/21/2009 08:59:51 PM:

On Jan 19, 2009, at 9:05 PM, John Malmberg wrote:

In investigating a failure of lib/Module/Build/t/compat.t, I discovered that it was because glob() was behaving differently.

glob('foo') on vms is interpreted as glob('foo.*') would be on Unix.
That's pretty much what would be expected from native utilities. For example,

$ dir foo

Directory D0:[CRAIG.TEST]

FOO.-ORIG;1         FOO.BAR;1           FOO.C;7             FOO.COM;25
FOO.CXX;5           FOO.DIR;1           FOO.H;4             FOO.LIS;4
FOO.MMS;5           FOO.OBJ;1           FOO.PATCH;1         FOO.TMP2;1
FOO.TXT;4

Total of 13 files.

This was work intentionally carried out by Charles Bailey several years ago.
It is currently working and passing tests not only as discussed on vmsperl
and as designed, but also as documented.  Here is a relevant passage
from perlvms.pod that shipped with perl 5.8.7:

  In both the case of unquoted command line arguments or in calls
to C<glob()> VMS wildcard expansion is performed. (csh-style wildcard expansion is available if you use C<File::Glob::glob>.)

There is also some advice in the perlport.pod document:

  Don't count on filename globbing.  Use C<opendir>, C<readdir>, and
  C<closedir> instead.

Based on that, the Module::Build component that is using glob needs to be changed to use File::Glob::glob instead.

I just completed build/test run of blead perl that was modified as per my previous e-mail, and found that no tests were dependent on the VMS specific behavior of glob(), and this resulted in the Module::Build test now passing.

Since there is a high risk in changing this default behavior, I will keep the old behavior as the default. I will set the new behavior to be in effect when the DECC$FILENAME_REPORT_UNIX setting is active.

vmsperl readers might note that perl on VMS is a programming
language that runs on VMS.  It is not a programming environment.
If you really want a Unix like programming environment you should
consider running GNV instead of relying on a single programming
language to provide your environment.

However GNV applications that use PERL require a Perl that behaves like it does on UNIX. The patches that I am in the process of submitting allows Perl to be put in a mode to do that. That way you can have one version of Perl and set behavior on a per application process.

Perhaps it is worth noting that another difference between perl in a Unix like environment and perl on VMS environment is that a call to C<unlink($file);> will only delete the latest RMS version of $file. Since Unix does not support RMS versioning one could point out that the function call seems to differ between the two environments. However, the function does not differ (since the $file;0 is deleted) and leaving previous versions may be more useful to someone writing a perl script to handle files on VMS the behavior is as desired, intended, and most useful to users of the language.

An upcoming patch to blead-perl implements this as an environment option, controlled by a logical name. It also covers the rename() case.

-John
wb8...@gmail.com
Personal Opinion Only

Reply via email to