Perl和Matlab之间的数据/ IO通信

时间:2012-06-29 04:44:45

标签: perl matlab io communication

我是MATLAB和Perl的活跃用户,我使用MATLAB作为运行主程序的平台,以及调用其他脚本,如Perl和Java Class。

但是,我从未找到过在Matlab中重用Perl输出的好方法,而不使用CSV / Excel / txt文件作为IO中位数。

我非常感谢促进Perl和Matlab之间通信的任何想法。 或者,你能推荐一些便于使用Matlab的类似语言吗?

提前多多感谢!

巧。

4 个答案:

答案 0 :(得分:3)

从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是一个数字。但是,这仅适用于标量,我无法将数字列表/散列转换为矩阵/向量。

答案 1 :(得分:1)

您是否尝试过使用内置函数PERL。它运行提供的Perl脚本并返回结果:

[result,status] = perl('hello.pl','World')

,其中

hello.pl

$input = $ARGV[0]; 
print "Hello $input.";

答案 2 :(得分:0)

您是否尝试过java作为中间人? 像

这样的东西
x      = java.lang.Runtime.getRuntime();
process= x.exec('/bin/perl params');
reader = java.io.BufferedReader(java.io.InputStreamReader(process.getInputStream()));
...
reader.readLine()

您可能会对outputstream执行相同操作以将数据发送到perl吗?虽然可能不是最经济的解决方案,但似乎相对简单。

答案 3 :(得分:0)

我可能建议从Perl调用Matlab,而不是从Matlab调用Perl。为此,我建议Inline::Octave。希望您的Matlab代码可以在Octave中运行而无需进行大量改造。

我有一个成功的故事,即使用Perl和Octave一起建立一个中等规模的科学计划。 Perl适用于收集数据,为Octave脚本和批处理准备输入。 Octave代码只能专注于计算任务的核心。 PDL是另一种选择,但由于原始代码的重写太难,我切换回Octave。