我是MATLAB和Perl的积极用户,我使用MATLAB作为运行主要程序的平台,并调用其他脚本,如Perl和Java Class。
然而,我从未找到一种好的方法来在Matlab中重复使用Perl的输出,而不使用CSV / Excel / txt文件作为IO媒介。
我非常感谢任何有助于促进Perl和Matlab之间通信的想法。或者,您能否建议其他类似的语言方便与Matlab一起使用?
非常感谢! Qiao.
非常感谢! Qiao.
我从Matlab帮助中学到了使用eval()
。
假设你的Perl脚本multiply.plx
执行:
$a=$ARGV[0];
$b=$ARGV[1];
$result=$a*$b;
print "$result";
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.";
你尝试过使用Java作为中介吗? 类似这样的
x = java.lang.Runtime.getRuntime();
process= x.exec('/bin/perl params');
reader = java.io.BufferedReader(java.io.InputStreamReader(process.getInputStream()));
...
reader.readLine()
不要从Matlab调用Perl,我建议从Perl调用Matlab。为此,我推荐使用Inline::Octave。希望你的Matlab代码可以在Octave中运行而无需进行太多改动。
我有一个成功的故事,使用Perl和Octave一起构建了一个中等规模的科学程序。Perl适用于收集数据、准备输入Octave脚本和批处理。Octave代码只能专注于计算任务的核心。PDL是另一个选择,但由于重写原始代码太困难,我又切换回了Octave。