加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何在运行的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提供有用的聊天和代码更正.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读