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

sorry may be i do not explicate well my idea: i changed the b k key of dispatch table as suggested by ikegami:
b => sub {exec 'perl', '-e', 'print map {qq!\t$_\n!}', @_},

but does not work alone like in:
code-dispatch.pl --execute --key b   a a a
nor in pipeline, like:
echo 1 2 3 | code-dispatch.pl --execute --key b

theese line only print 'ole' (the check if that key exists in the table) and do not print a column of argouments as intended to do (by me)

thanks

there are no rules, there are no thumbs..

Replies are listed 'Best First'.
Re^3: become another via exec in dispatch table
by ikegami (Patriarch) on Jan 31, 2012 at 12:05 UTC

    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?

      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}