Perl脚本在matlab中与文件描述符混淆

ben*_*_za 5 io perl matlab

我使用perl脚本替换数据文件中的某些字符串.从matlab程序中调用perl脚本,该程序在执行perl脚本之前和执行之后写入数据文件.

然后我的matlab程序将写入数据文件,但由于某种原因它不会.

这是一个最小的例子:Matlab代码:

f = fopen('output.txt','a');
fprintf(f,'This is written\n');
perl('replace.perl','output.txt');
fprintf(f,'This is not\n');
[fname perm] = fopen(f)
type('output.txt');
fclose(f);
Run Code Online (Sandbox Code Playgroud)

perl脚本:

#!/usr/bin/perl -i
while(<>){
  s/This/This here/;
  print; 
}
close;  
Run Code Online (Sandbox Code Playgroud)

变量fname和perm已正确分配.输出type只是"这里写的".

我对perl很新,所以我可能在剧本中犯了一些我无法找到的菜鸟错误.谢谢你的帮助.

tjd*_*tjd 8

秘密在于-i.在perl和许多其他程序中进行就地编辑是通过打开原始文件进行读取,打开临时文件进行写入,然后取消链接原始文件并将临时文件重命名为原始文件的名称来完成的.

现在运行了你的perl脚本之后,糟糕的matlab会为现在未链接的文件保留一个文件句柄.你继续写作,但没有简单的方法可以看到写的内容......即使文件没有从matlab中改变,你也不得不处理matlab即将写入现在的事实这一事实不再是文件的结尾.

最后,您需要非常小心地让两个程序/用户/计算机同时写入同一个文件.在调用perl之前关闭matlab文件句柄.如果证明确实有必要,请重新打开它以便稍后追加.