如何在运行的Perl会话中编译Perl脚本?
发布时间:2020-12-15 21:47:53 所属栏目:大数据 来源:网络整理
导读:我有一个Perl脚本,它接受用户输入并创建另一个将在以后运行的脚本.我目前正在编写这些脚本的测试,我想要执行的其中一个测试是检查生成的脚本是否成功编译(例如perl -c script).有没有办法我可以拥有Perl对生成的脚本执行编译而不必生成另一个Perl进程?我已
我有一个Perl脚本,它接受用户输入并创建另一个将在以后运行的脚本.我目前正在编写这些脚本的测试,我想要执行的其中一个测试是检查生成的脚本是否成功编译(例如perl -c< script>).有没有办法我可以拥有Perl对生成的脚本执行编译而不必生成另一个Perl进程?我已经尝试搜索答案,但搜索只是将有关将Perl脚本编译成可执行程序的信息.
解决方法
要执行动态生成的代码,请使用eval函数:
my $script = join /n/,<main::DATA>; eval($script); # 3 __DATA__ my $a = 1; my $b = 2; print $a+$b,"n"; 但是,如果您只想编译或检查语法,那么您将无法在相同的Perl会话中执行此操作. 库Test::Strict中的函数syntax_ok通过使用外部perl解释器运行perl -c来运行语法检查,因此我假设没有内部方法. 只有可能对您有用的解决方法是: my $script = join /n/,<main::DATA>; eval('return;' . $script); warn $@ if $@; # syntax error at (eval 1) line 3,near "1 # my " __DATA__ my $a = 1 my $b = 2; print $a+$b,"n"; 在这种情况下,您将能够使用$@检查编译错误,但是因为代码的第一行是return;,它将不会执行. 注意:感谢用户mob提供有用的聊天和代码更正. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |