引自here:
static PerlInterpreter *my_perl;
main (int argc, char **argv, char **env)
{
STRLEN n_a;
char *dummy_argv[] = { "", "-e", "0" };
my_perl = perl_alloc();
perl_construct( my_perl );
perl_parse(my_perl, NULL, 3, dummy_argv, NULL);
perl_run(my_perl);
/** Treat $a as an integer **/
eval_pv("$a = 3; $a **= 2", TRUE);
printf("a = %d\n", SvIV(get_sv("a", FALSE)));
/** Treat $a as a float **/
eval_pv("$a = 3.14; $a **= 2", TRUE);
printf("a = %f\n", SvNV(get_sv("a", FALSE)));
/** Treat $a as a string **/
eval_pv("$a = 'relreP kcaH rehtonA tsuJ'; $a = reverse($a);", TRUE);
printf("a = %s\n", SvPV(get_sv("a", FALSE), n_a));
perl_destruct(my_perl);
perl_free(my_perl);
dummy_argv的第一个元素(此处为""
)对perl_parse意味着什么?
我尝试将其修改为我想要的任何内容并且没有任何变化..
答案 0 :(得分:1)
在C中,argv[0]
是正在执行的程序的名称。在大多数情况下,嵌入式Perl解释器并不真正关心你放在那里的东西,这就是你改变它时没有注意到的原因。
请记住,Perl主要是一个独立的解释器;将其嵌入其他程序是次要用途。 Perl的main()
函数只是将它收到的argc
和argv
传递给perl_parse
,因为这是最简单的。当你在程序中调用perl_parse
时,你必须为argv[0]
提供一些东西,但我认为它唯一用的是设置$^X
,大多数Perl代码都没有使用它