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.



As a result, the clean target is incorrectly deleting 'foo.PL' when it was requested to delete 'foo', along with deleting 'foo'.

Last time I checked, I thought it was because something was deleting *.pl and assuming a case sensitive file system so *.PL got deleted as well.

And even worse, if 'foobar' is a directory, glob('foobar') on VMS is treated as if it were glob('foobar/*') on Unix. And it does not matter if it is specified as glob('[.foobar]'), glob('foobar.dir'), or glob('foobar/'), it still is treated as if it were glob('foobar/ *') on a Unix system.

In the case of a file, this appears that it may be an oversight in the implementation. In the case of the directory, code has been specifically added to cause this behavior.

I am trying to figure out what the fix should be.


I'm not sure either. Things have been the way they are for a very long time, quite possibly since before any standards emerged for glob or fnmatch.

________________________________________
Craig A. Berry
mailto:craigbe...@mac.com

"... getting out of a sonnet is much more
 difficult than getting in."
                 Brad Leithauser

Reply via email to