On Mon, Jan 14, 2013 at 9:06 PM, Gabor Szabo <ga...@szabgab.com> wrote:

> On Mon, Jan 14, 2013 at 9:59 PM, Buddy Burden <barefootco...@gmail.com>
> wrote:
> > Guys,
> >
> > Okay, my Google-fu is failing me, so hopefully one of you guys can help
> me out.
> >
> > For a test, I need to run a snippet of Perl and collect the output.
> > However, if it rus in the current interpreter, it will load a module
> > that I need not to be loaded ('cause I'm also going to test if my code
> > properly loads it).  So I want to run it in a separate instance of
> > Perl.
> >
> > First (naive) attempt:
> >
> >     my $output = `$^X -e '$cmd'`;
> >
> > This works fine on Linux, but fails on Windows.  Happily, as soon as I
> > saw the failures, I recognized I had a quoting problem.  No worries, I
> > said: let's just bypass the shell altogether:
>

  On Windows, that still leaves a quoting problem, I believe.
IPC::System::Simple certainly does not seem to handle it: Unless I misread
it entirely, it ends up sending "$^C -e $cmd" as the command line to
Win32::Process::Create.

  Let's see ...

C:\Windows\system32>perl -MIPC::System::Simple=capturex -e "print
capturex($^X, '-le', qq{print(qq(--ARG\@{[++\$i]}-->\$_))for\@ARGV;
die(q/Oops - that was odd/)})"
--ARG1-->die(q/Oops
--ARG2-->-
--ARG3-->that
--ARG4-->was
--ARG5-->odd/)

C:\Windows\system32>

  Oh yes.  It's not doing any quoting.



> I am not sure if this helps but in Windows you need to put the
> double-quotes around  $cmd
>
>     my $output = qx{$^X -e "$cmd"};
>
> and of course inside $cmd you should use single quotes and not double
> quotes if you need
> some quotation.
>
> Oh the joy :)
>

  Or, since $^X presumably is a perl, use C<< qq() >> and/or C<< \x22 >>
instead of C<< "" >>. :)

C:\Windows\system32>perl -e "print qx!$^X -le
\x22print(qq(--ARG\@{[++\$i]}-->\$_))for\@ARGV; die(q/Oops - that was
odd/)\x22!"
Oops - that was odd at -e line 1.

C:\Windows\system32>


Eirik

Reply via email to