我是 MATLAB 和 Perl 的活跃用户,我使用 MATLAB 作为平台来运行主要程序,以及调用 Perl 和 Java 类等其他脚本。
但是,我从来没有找到一种在 Matlab 中重用 Perl 输出的好方法,而不使用 CSV/Excel/txt 文件作为 IO 中值。
我非常感谢任何促进 Perl 和 Matlab 之间交流的想法。或者,您能否推荐其他便于使用 Matlab 的类似语言?
提前非常感谢!
乔。
我是 MATLAB 和 Perl 的活跃用户,我使用 MATLAB 作为平台来运行主要程序,以及调用 Perl 和 Java 类等其他脚本。
但是,我从来没有找到一种在 Matlab 中重用 Perl 输出的好方法,而不使用 CSV/Excel/txt 文件作为 IO 中值。
我非常感谢任何促进 Perl 和 Matlab 之间交流的想法。或者,您能否推荐其他便于使用 Matlab 的类似语言?
提前非常感谢!
乔。
从 Matlab 帮助我学会了使用eval()
.
所以假设你的 perl 脚本multiply.plx
执行
$a=$ARGV[0];
$b=$ARGV[1];
$result=$a*$b;
print "$result";
在 Matlab 中只需调用
a=perl('multiply.plx','2','3');
b=eval(a);
变量a
将是一个字符串,而变量b
是一个数字。但是,这仅适用于标量,我无法将数字列表/散列转换为矩阵/向量。
您是否尝试过使用内置函数PERL。它运行提供的 Perl 脚本并返回结果:
[result,status] = perl('hello.pl','World')
在哪里
$input = $ARGV[0];
print "Hello $input.";
我可能会建议从 Perl 调用 Matlab,而不是从 Matlab 调用 Perl。为此,我推荐Inline::Octave。希望您的 Matlab 代码无需大修即可在 Octave 中运行。
我有一个使用 Perl 和 Octave 一起构建中型科学程序的成功故事。Perl 非常适合收集数据、为 Octave 脚本和批处理准备输入。Octave 代码只能专注于计算任务的核心。PDL是另一种选择,但我切换回 Octave,因为重写原始代码太难了。
你试过java作为中介吗?就像是
x = java.lang.Runtime.getRuntime();
process= x.exec('/bin/perl params');
reader = java.io.BufferedReader(java.io.InputStreamReader(process.getInputStream()));
...
reader.readLine()
您可以对输出流执行相同的操作以将数据发送到 perl?似乎相对简单,但可能不是最经济的解决方案。