我是MATLAB和Perl的活跃用户,我使用MATLAB作为运行主程序的平台,以及调用其他脚本,如Perl和Java Class。
但是,我从未找到过在Matlab中重用Perl输出的好方法,而不使用CSV / Excel / txt文件作为IO中位数。
我非常感谢促进Perl和Matlab之间通信的任何想法。 或者,你能推荐一些便于使用Matlab的类似语言吗?
提前多多感谢!
巧。
答案 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')
,其中
$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。