2017-05-30 92 views
0

我正在写一个Perl脚本,用于读取包含部分Perl代码和非Perl数据的文件。如何将eval输出重定向到文件?

处理完文件后,我将它们写入临时文件(生成的脚本),然后使用eval命令执行。我不想单独运行生成的脚本,因为我需要使用主脚本中的变量插入到生成的脚本中。

我需要将eval命令的输出重定向到一个文件。有关如何实现这一目标的任何建议?

步骤脚本:

  1. READ_FILE

  2. 进程文件

  3. 回写与临时文件名

  4. 读取临时文件(my $file_name = read_file('temp_file_name')

  5. 的eval(eval $file_name

欣赏的帮助。

+0

是输出去到stdout做什么? – simbabque

+0

是的。它目前正在STDOUT上打印。 – Vinay

+0

然后你可以使用Capture :: Tiny,把它放在一个变量中,然后从那里写入一个文件。有几个很好的答案。我会找到重复的目标。 – simbabque

回答

5

这可以在没有任何额外的模块

use strict; 
use warnings; 

open my $fh, '>', 'foo.txt' or die $!; 
my $old_fh = select $fh; 

eval q{ print "Hello World!\n"; }; 

select $old_fh; 
+0

嗨鲍罗丁, 这工作得很好。谢谢您的帮助。 – Vinay

5

您可以使用capture_stdoutCapture::Tiny获取您的eval的输出。

use strict; 
use warnings; 
use Capture::Tiny 'capture_stdout'; 

my $stdout = capture_stdout { 
    eval q{print "Hello World!\n";}; 
}; 

open my $fh, '>', 'foo.txt' or die $!; 
print $fh $stdout; 
+0

这是工作。 谢谢。 – Vinay