在这里排名初学者请温柔...我正在用perl编写一个程序,它可以找到所有特定的文件类型并调用另一个名为newstack的程序来转换文件类型。
当我newstack oldfileame newfilename
从我的外壳运行时,它工作正常。
当我的程序运行时system("newstack oldfileame newfilename")
newstack 返回错误:
ERROR: NEWSTACK - NO INPUT FILE SELECTED
sh: line1: ./oldfilename: cannot execute binary file
如果我编写一个执行相同操作的 shell 脚本,一次在文件上运行一个 newstack,它就可以正常工作。我在这里遗漏了什么,为什么在 perl 程序的上下文中运行时它会失败?
Newstack来自IMOD程序套件,我不知道它是用什么写的。文件是mrc文件,它们是二进制图像文件。
编辑:: 这是所要求的实际代码:
print "Enter the rootname of the files to be converted: ";
my $filename = <STDIN>;
chop $filename;
my @files = qx(ls $filename*.mrc);
open LOGFILE, (">modeconvert-log");
foreach my $mrc (@files)
{
print LOGFILE "$mrc";
system("newstack -mode 2 $mrc $mrc");
}
my $fileno = @files;
print "$fileno files converted\n";
我chop $mrc
在第 8 行之后添加,它解决了问题