Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl-内部文件(创建和执行)_Perl_File_Execute - Fatal编程技术网

Perl-内部文件(创建和执行)

Perl-内部文件(创建和执行),perl,file,execute,Perl,File,Execute,我有一个关于用perl创建文件并执行它们的快速问题。我想知道是否可以使用perl生成一个文件(我实际上需要一个.bat脚本),然后在程序内部执行这个文件。我知道我可以创建文件,我已经使用perl,但是,我想在程序内部这样做。所以,我想要它做的是在程序内部创建一个批处理脚本(没有文件被写入磁盘,所有内容都保留在内存中,或者perl程序中),然后一旦它完成文件的写入,我希望能够实际执行这个文件,然后丢弃它刚刚写入的文件。我基本上是想让它动态地创建一个批处理脚本,这样我就可以从脚本的输出中输出文本文件

我有一个关于用perl创建文件并执行它们的快速问题。我想知道是否可以使用perl生成一个文件(我实际上需要一个.bat脚本),然后在程序内部执行这个文件。我知道我可以创建文件,我已经使用perl,但是,我想在程序内部这样做。所以,我想要它做的是在程序内部创建一个批处理脚本(没有文件被写入磁盘,所有内容都保留在内存中,或者perl程序中),然后一旦它完成文件的写入,我希望能够实际执行这个文件,然后丢弃它刚刚写入的文件。我基本上是想让它动态地创建一个批处理脚本,这样我就可以从脚本的输出中输出文本文件,而不是在磁盘上创建批处理脚本,然后执行它,然后在完成后从磁盘上删除批处理文件

这能做到吗?我该怎么做

问候,,
绘制

打开文件;创造内容;关闭文件;执行文件(例如,使用system());删除该文件。

是否确实需要批处理脚本?也许您想做的一切都可以直接从Perl完成,或者由Perl通过其
系统
命令直接调用

如果批处理脚本是必需的,那么为脚本创建一个临时文件,然后使用
系统执行它有什么不对?请参阅,它甚至会在完成后自动删除临时文件

如果虚拟批处理文件策略不可避免,则可以利用
cmd
/C
/S
选项。大概是这样的:

use strict;
use warnings;

my @batch_commands = (
    'dir',
    q{echo "Make sure quoting isn't busted"},
    'ipconfig',
);

# Use & or &&, depending on your needs. Run `cmd /?` for details.
my $virtual_bat_file = join " &\n", @batch_commands;

system "cmd /C $virtual_bat_file";

但这感觉很不对。必须有更好的方法来实现应用程序的更大目标。顺便说一句,当您运行
cmd/?
了解
/C
/S
&
&
的对比时,您会很快意识到在批处理领域是多么可怕。尽可能远离现场。

FM感谢您的努力。让我继续解释。我之所以希望如此,是因为需要创建的批处理脚本是动态构建的。基本上,基于一个充满文件的目录,在我的例子中是TIF文件,它构建了一组命令,从这些TIF文件中获取信息,然后导出一个包含原始数据的文本文件。现在,将创建.batch脚本,并将其输出到文件,然后保留在驱动器上…继续。。。我知道我可以在执行结束时轻松删除文件,但是,我不希望这样。实际上,我希望它构建命令集并执行脚本,而不是将批处理文件创建到磁盘。批处理脚本都是动态数据,格式为:tiffcommand tiffile.tif tiffcommand tiffile2.tif等。。。数据总是会更改,这就是为什么我希望动态创建并动态执行它。大多数临时文件模块(IIRC,包括file::temp)都有一个选项,可以在程序存在后自动删除创建的临时文件,或者临时文件对象超出范围。为什么要编写一个Perl程序来编写批处理程序来执行某些处理,而不是从Perl程序执行任何处理?另请参阅