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

3
我是MATLAB和Perl的积极用户,我使用MATLAB作为运行主要程序的平台,并调用其他脚本,如Perl和Java Class。 然而,我从未找到一种好的方法来在Matlab中重复使用Perl的输出,而不使用CSV / Excel / txt文件作为IO媒介。 我非常感谢任何有助于促进Perl和Matlab之间通信的想法。或者,您能否建议其他类似的语言方便与Matlab一起使用?
非常感谢! Qiao.
4个回答

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

你尝试过使用内置函数PERL吗?它可以运行提供的Perl脚本并返回结果:

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

在哪里

hello.pl

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

感谢您的输入!但是结果将只是一个包含所有打印子句结果的字符串,我们需要进一步处理它以获取有意义的数据。在实践中使用并不容易。 - Qiao Zhou

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,虽然这似乎相对简单,但可能不是最经济的解决方案。

0

不要从Matlab调用Perl,我建议从Perl调用Matlab。为此,我推荐使用Inline::Octave。希望你的Matlab代码可以在Octave中运行而无需进行太多改动。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接