jithoosin has asked for the wisdom of the Perl Monks concerning the following question:

Hi monks,

I have read in perlembed that we can execute a perl file using "perlrun" by giving the value of argv(1) as the name of the perl file to be executed. I also want pass arguments to the perl file .I want to pass arguments in the same way as we pass command line arguments to perl file.To make things clear, let me say that i cannot use a subroutine inside the perl file to accept the arguments( as in case of "call_pv" ). Is there any way by which i could pass arguments to perl file

  • Comment on way to pass command line arguments in perl embed

Replies are listed 'Best First'.
Re: way to pass command line arguments in perl embed
by polettix (Vicar) on Jan 03, 2006 at 13:43 UTC
    The perl_parse() function probably does what you're looking for. From perlapi:
    perl_parse Tells a Perl interpreter to parse a Perl script. See perlembed. int perl_parse( PerlInterpreter* interp, XSINIT_t xsinit, int argc, char** argv, char** env)
    perlembed has some examples using; the argv parameter in perl_parse(). Another bare one could be something like this (vaguely inspired by the PerlPower example but omitting all the surrounding stuff):
    #include <EXTERN.h> #include <perl.h> static PerlInterpreter *my_perl; int main (int argc, char *argv[], char *env[]) { char *private_argv[] = { "", "", "some", "args" }; my_perl = perl_alloc(); perl_construct(my_perl); perl_parse(my_perl, NULL, 4, private_argv, NULL); perl_run(my_perl); /* ... */ } /* ... */
    Note that these are arguments as you would find in a real command line; this means that -e, for example, gets caught by the perl_parse() function, which looks for the next argument to find an inline sequence of statements. There are a couple of examples in perlembed that use this feature.

    perl -ple'$_=reverse' <<<ti.xittelop@oivalf

    Don't fool yourself.