3

该线程讨论了从 Bash 脚本中运行 Python 代码的方法。

有没有办法在 Perl 脚本中做类似的事情?即有没有办法运行在 Perl 脚本上键入的 Python 代码?请注意,我不是在询问如何从 Perl 脚本运行 Python文件。我问的是直接在具有 Perl 脚本的同一文件中运行 Python 代码(就像另一个线程讨论如何从 Bash 脚本运行 Perl 代码一样)。

例子:

# /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 脚本

4

2 回答 2

4

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

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

于 2013-04-30T23:18:22.453 回答
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 中的 Bash 中的 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 中的命令行上进行了测试)

于 2013-04-30T23:18:11.160 回答