dummy_argv的第一个元素对perl_parse意味着什么?

时间:2011-09-14 08:52:37

标签: c perl

引自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意味着什么?

我尝试将其修改为我想要的任何内容并且没有任何变化..

1 个答案:

答案 0 :(得分:1)

在C中,argv[0]是正在执行的程序的名称。在大多数情况下,嵌入式Perl解释器并不真正关心你放在那里的东西,这就是你改变它时没有注意到的原因。

请记住,Perl主要是一个独立的解释器;将其嵌入其他程序是次要用途。 Perl的main()函数只是将它收到的argcargv传递给perl_parse,因为这是最简单的。当你在程序中调用perl_parse时,你必须为argv[0]提供一些东西,但我认为它唯一用的是设置$^X,大多数Perl代码都没有使用它