在Perl脚本上使用另一个解释器运行代码

时间:2013-04-30 23:07:12

标签: python perl

This thread讨论了在Bash脚本中运行Python代码的方法。

有没有办法在Perl脚本中做类似的事情?即是否有任何方法运行在Perl脚本上键入的Python代码?请注意,我不是要求从Perl脚本运行Python 文件。我问的是直接在同一个包含Perl脚本的文件中运行Python代码(与其他线程讨论如何运行Perl代码的Bash脚本相同)。

示例:

# /bin/perl
use 5.010
my $some_perl_variable = 'hello';


# ... BEGIN PYTHON BLOCK ...
# We are still in the same file. But we are now running Python code
import sys;
print some_perl_variable # Notice that this is a perl variable
for r in range(3):
  print r
# ... END PYTHON BLOCK ...

say "We are done with the Perl script!" 
say "The output of the Python block is:"
print $output" 
1; 

应打印:

We are done with the Perl script! 
The output of the Python block is: 
hello
1
2 
3

我们完成了perl脚本

2 个答案:

答案 0 :(得分:4)

听起来你会对Inline模块感兴趣。它允许Perl以许多其他语言调用代码,并依赖于每种语言的支持模块。

你没有说你想做什么,但你提到了Python,并且有一个Inline::Python

答案 1 :(得分:2)

是的,Perl可以使用相同的技术(here-docs)。

Bash中的Perl:

perl <<'END' # note single quotes to avoid $variable interpolation
use 5.010;
say "hello world";
END

perl -E'say "hello from perl"'

Perl中的Bash:

use autodie; # less error handling
open my $bash, "|-", "bash";
print $bash <<'END'; # single quotes again
echo hello from bash
END

Perl in Bash in Perl:

use autodie; # less error handling
open my $bash, "|-", "bash";
print $bash <<'END'; # single quotes again
perl <<'INNER_END'
 use 5.010;
 say "hello inception";
INNER_END
END

(我在命令行上讽刺地测试了另一个heredoc)