in reply to system and wildcard expansion?

This is weird, because for me on ActiveState 820 (5.8.8+) with cmd.exe it works just the other way around:

Q:\>perl -wle "system 'echo *.pl'" *.pl Q:\>perl -wle "system 'echo *'" * Q:\>perl -wle "system 'echo *.*'" *.* Q:\>perl -wle "system 'type *.pl'" lcfget.pl #!/usr/bin/perl -w use strict; use Getopt::Long; ...

If you have cmd.exe as your shell, glob expansion should not happen, because cmd.exe does not glob. Also, (the string form of) system looks for "shell metacharacters" and if so (and on Windows, always to nearly always) invokes the shell if these are found.

So, unless $ENV{PERL5OPT} is loading weird modules or you don't have cmd.exe as the default shell, what you see shouldn't happen (on Windows). If it is none of the above , then I would call that a regression in Perl, as especially on Windows, system() is (almost) always system(STRING) and there is no sane way for Perl to decide whether it should glob-expand parameters or not.

Replies are listed 'Best First'.
Re^2: system and wildcard expansion?
by MishaMoose (Scribe) on Nov 11, 2010 at 14:22 UTC

    as to other systems - SunOS srv13 5.9 Generic_122300-44 sun4u sparc SUNW,Sun-Fire with Perl v5.8.4 has the following results: echo

    perl -le"system 'echo *'" argtest.c bool.pl cool_fmt_tool.pl debugtst.c regexstuff regexstuff.c +regexstuff.i testx.pl useful_stuff.c

    and type (which is a bit different in unix 8^):

    perl -le"system 'type *'" argtest.c not found bool.pl not found cool_fmt_tool.pl not found debugtst.c not found regexstuff not found regexstuff.c not found regexstuff.i not found testx.pl not found useful_stuff.c not found

    I would suspect a pathing issue with somthing unixy in the path on one of my windows boxes. I have a Mac and a Win7 and a WinXP box at home and will see what they do .. now I am curious

    Misha/Michael - Russian student, grognard, bemused observer of humanity and self professed programmer with delusions of relevance

      Yes - rofv's reply is likely spot on. A unixish echo.exe in the path that does the command-line globbing itself would explain what happens.

        Agreed! I find windows pathing to be rather less than transparent. I tend to get bitten by it much more often than I ought.

        Misha/Michael - Russian student, grognard, bemused observer of humanity and self professed programmer with delusions of relevance