如何在C中告诉嵌入式perl它的工作目录是什么?
它似乎设置为使用嵌入式perl的可执行文件的目录.在调用嵌入的perl之前从外部设置目录不会改变它的行为.
在实际脚本启动之前,可能会在"chdir"中弹出一个可能的解决方法,但我不喜欢这样.
我的代码在技术上看起来像这样:
PERL_SYS_INIT3(NULL, NULL, NULL);
my_perl = perl_alloc();
PERL_SET_CONTEXT(my_perl);
PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
PERL_SET_CONTEXT(my_perl);
PL_perl_destruct_level = 1;
perl_construct(my_perl);
int argc = 2;
char** argv = new char*[argc];
argv[0] = new char[4096];
argv[0][0] = '\0';
argv[1] = scriptFileName;
PERL_SET_CONTEXT(my_perl);
perl_parse(my_perl, xs_init, argc, argv, (char **)NULL);
perl_run(my_perl)
PL_perl_destruct_level = 1;
PERL_SET_CONTEXT(my_perl);
perl_destruct(my_perl);
perl_free(my_perl);
my_perl = NULL;
Run Code Online (Sandbox Code Playgroud)
上面列出的代码在不同的线程中运行.也许有什么需要考虑的?
谢谢你的提示!
在周围的 C 中做chidir可能还不够,除非您还确保PWD周围代码的环境中的字段也被更新。否则,该变量可能会被$ENV{PWD}您的 perl 继承,因为您将NULL作为最终参数传递给perl_parse. 但并不能 100% 确定这一点。
PWD正如 @ikegami 指出的那样,非 shell 代码不应依赖环境变量。然而,一些写得不好的代码可能依赖于它,所以值得检查。