in reply to Re^2: become another via exec in dispatch table
in thread become another via exec in dispatch table

Again, "does not work" is not an adequate description. Specifically, you get:

ole syntax error at -e line 1, at EOF Execution of -e aborted due to compilation errors.

So lets look at the code:

print map {qq!\t$_\n!}

Where's map's list of values?

Replies are listed 'Best First'.
Re^4: become another via exec in dispatch table
by Discipulus (Canon) on Jan 31, 2012 at 12:36 UTC
    ok i was so stupid to cut and paste your suggestion in my code.. i speak too generic like in 'does not work'.. maybe my original idea is stupid/unpractical/bogus prone/or worst...

    but really no one understand what i'm asking for?
    I have changed the dispatch table in this way:
    my %cmds = ( a => sub {exec 'perl', '-e', 'print map {qq!\t$_\n!} @ARG +V', @_}, b => sub {exec 'perl', '-e', 'print map {qq!\t$_\n!} @ARG +V', @_}, b1 => sub {exec 'perl', '-e', 'print map {qq!\t$_\n!} @_' +, @_}, b2 => sub {exec 'perl', '-e', 'print qq!@ARGV!', @_}, c => sub {my $res; foreach (@ARGV) {$res+=$_}; print $res +;exit 0 }, ); ## # calling with --key a b b1 b2 like in # dispatch.pl --execute --key a A B C # everytime produces: # #ole #--a blank line-- #only the c key runs as expected (to me) but not use exec #c:\SCRIPTS>dispatch.pl --execute --key c 1 2 3 4 5 #ole #15 #c:\SCRIPTS> #key c in a pipeline produces: #c:\SCRIPTS>echo 1 2 3 | dispatch.pl --execute --key c #ole #Use of uninitialized value $res in print at c:\SCRIPTS\code-dispatch. +pl line 16. c:\SCRIPTS>

    sorry about my errors
    in any case thanks for the attention
    L*

    there are no rules, there are no thumbs..

      Adding @ARGV: good. (Well, at least for when you want to get the data from command line arguments.)

      Undoing the fixes I previously mentioned: bad.

      ug, it's Windows. That complicates things. Using the mutli-arg form of `exec`, while normally simpler, becomes tricky. Best avoid it.

      exec 'perl', '-e', 'program', @args
      should be changed to
      exec qq{perl -e"program" @quoted_args}