从Perl调用Fortran程序而不保存输入/输出文件

从Perl调用Fortran程序而不保存输入/输出文件,perl,fortran,Perl,Fortran,我正在使用Perl程序将用户输入正确格式化为Fortran程序的输入文件。Fortran程序创建输出文件和错误文件。Fortran程序是从Perl调用的,类似于: system "/mydirectories/fortranexecutable $inputfile $outputfile $errorfile"; 我想知道是否有一种方法可以调用Fortran可执行文件,而不必在调用Fortran程序之前/之后实际创建输入/输出/错误文件并将其保存到磁盘?我希望我的问题是清楚的,不要太明显。我

我正在使用Perl程序将用户输入正确格式化为Fortran程序的输入文件。Fortran程序创建输出文件和错误文件。Fortran程序是从Perl调用的,类似于:

system "/mydirectories/fortranexecutable $inputfile $outputfile $errorfile";

我想知道是否有一种方法可以调用Fortran可执行文件,而不必在调用Fortran程序之前/之后实际创建输入/输出/错误文件并将其保存到磁盘?我希望我的问题是清楚的,不要太明显。我是Perl新手,我试着到处搜索这个。提前谢谢你的帮助

否。如果Fortran程序的编写方式是将
$inputfile
作为命令行参数,从中读取数据,并输出
$outputfile
$errorfile
,那么唯一的方法就是通过文件执行


如果您希望通过标准输入将输入数据传递给Fortran可执行文件,则必须修改Fortran源代码以适应此类输入。

如果Fortran代码按顺序读取和写入现有文件,但您希望通过Perl代码“实时”与之通信,然后你可以用它四处走动。它们仍然以条目的形式存在于文件系统中,并且可以通过指定名称的Fortran代码像平常一样打开文件,但是从它们读取/写入它们就像管道一样

在Perl中,您可以这样做(显然是从以下内容复制):


这完全取决于Fortran代码,Perl不参与其中。而是显示Fortran代码。我不想更改Fortran可执行文件。我想知道是否有一种方法可以在不将文件保存到磁盘的情况下调用fortran程序。是否可以将Perl数组或字符串作为
$inputfile
数据传递,然后将
$outputfile
$errorfile
输出保存到Perl变量中,以便对其进行后处理?是的,我认为这是避免编写文件的好方法。我该怎么做呢?好的。perl和fortran需要使用哪种类型的标准输入/输出?@shivsta这取决于如何在fortran程序中设计数据输入。如果你问如何使用read(,),这个问题太广泛了,你应该参考一些Fortran语言。请注意,您的问题和我的答案都与Perl无关。问题/答案与Fortran也没有太大关系。。。这确实是一个程序设计的问题。
use File::Temp qw(tempdir);
use File::Spec::Functions qw(catfile);
use POSIX qw(mkfifo);

my $dir = tempdir(CLEANUP=>1);
my $inputfifo = catfile($dir, "input");
mkfifo($inputfifo, 0700) or die "mkfifo($inputfifo) failed: $!";
my $outputfifo = catfile($dir, "output");
mkfifo($outputfifo, 0700) or die "mkfifo(output$fifo) failed: $!";
my $errorfifo = catfile($dir, "error");
mkfifo($errorfifo, 0700) or die "mkfifo($errorfifo) failed: $!";

... open the FIFOs ...

system "/mydirectories/fortranexecutable $inputfifo $outputfifo $errorfifo";

... operate with the FIFOs to communicate with the Fortran code ...

... close FIFOs and remove $dir when finished ...