I also think that there me some mis-interpretation here of the system docs:

<snip src="cmd:perldoc -f system">
If there is more than one argument in LIST,
or if LIST is an array with more than one value, starts the program
given by the first element of the list with arguments given by the
rest of the list.  If there is only one scalar argument, the argument
is checked for shell metacharacters, and if there are any, the
entire argument is passed to the system's command shell for parsing
(this is C</bin/sh -c> on Unix platforms, but varies on other
platforms).  If there are no shell metacharacters in the argument,
it is split into words and passed directly to C<execvp>, which is
more efficient.
</snip>

Basically this says that :
system('ls','-d','/'); skips the shell
system('ls -d /'); is broken into words and skips the shell and
system('ls -d /*'); is passed to the shell as one big string.
system('ls      -d /*'); of course is the same

After reading this I wasn't sure how it would handle:
system('ls','-d','/*'); since it's more than one argument but with shell
metacharacters... I assumed it would go to the shell...

But I was wrong. It doesn't go to the shell for metacharacter interpretation
and it reports: ls: /*: No such file or directory

Therefore it's safe to say that no string concatenation is done, and it
makes sense that ' -el' is not a valid argument.

-- Ryan



----- Original Message -----
From: "Ryan Parr" <[EMAIL PROTECTED]>
To: "Randy Kobes" <[EMAIL PROTECTED]>; "Garth Winter Webb"
<[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>
Sent: Friday, March 22, 2002 9:55 PM
Subject: Re: Can't open perl script " -spi.bak"


> On FreeBSD using Perl 5.6.1:
>
> perl -e 'system("ls","-d","/");'    <-- This works, showing just "/"
> perl -e 'system("ls"," -d","/");'   <-- This fails, showing "ls:  -d: No
> such file or directory"
>
> On FreeBSD using tcsh:
>
> perldoc "-f" system        <-- This works
> perldoc " -f" system       <-- The shell sees that it doesn't start with
a -
> and interperets it as a module to look up documentation for.
>
> On Win2K using cmd:
>
> dir "C:\ "                           <-- This works
> dir " C:\"                           <-- Again, same issue, "The filename,
> directory name, or volume label syntax is incorrect"
>
> I think that this is pretty standard behaviour, and will be seen in
various
> examples on multiple system. I also think that this is indeed desirable.
>
> -- Ryan
>
> ----- Original Message -----
> From: "Randy Kobes" <[EMAIL PROTECTED]>
> To: "Garth Winter Webb" <[EMAIL PROTECTED]>
> Cc: <[EMAIL PROTECTED]>
> Sent: Friday, March 22, 2002 5:43 PM
> Subject: Re: Can't open perl script " -spi.bak"
>
>
> > On 22 Mar 2002, Garth Winter Webb wrote:
> >
> > > On Fri, 2002-03-22 at 12:57, Robert Landrum wrote:
> > >
> > > > >That's is very weird, because this code doesn't seem to work:
> > > > >
> > > > >perl -e 'system("perl", " -e1") == 0 or die "oops"'
> > > >
> > > > Actually, that's not all that weird.  Most shells take care of
> > > > stripping out garbage before setting the argument list.  Since
> > > > system(LIST) doesn't use the shell, it's passing perl the literal "
> > > > -e1" which perl won't recognize as a command line option (and
> > > > correctly so in my opinion).
> > >
> > > Actually this isn't standard behavior.  I can't think of a situation
> > > where I would want to use system to concatanate a string for me rather
> > > than interpreting the string as an argument and act accordingly.  If
you
> > > check 'perldoc -f system', this is exactly what system is supposed to
do
> > > when given a program name and a list of arguments, so it looks like
> > > 'systetm' may be buggy in the win32 version of perl
> >
> > This behaviour seems to be dependent on the Perl version and on
> > the Win32 "shell" used - the leading whitespace in front of the
> > 1st argument after the program name in the system() call didn't
> > cause a problem on Windows 98 with ActivePerl 626 (which I used
> > to develop that part of the Makefile.PL), but it does cause a
> > problem on other Win32s with different ActivePerl versions.
> >
> > best regards,
> > randy kobes
> >
>

Reply via email to