如何将eval输出重定向到文件?

Vin*_*nay 0 perl eval

我正在编写一个Perl脚本,我在其中读取包含Perl代码段和非Perl数据的文件.

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

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

脚本中的步骤:

  1. READ_FILE

  2. 处理文件

  3. 使用临时文件名回写

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

  5. eval(eval $file_name)

感谢帮助.

sim*_*que 6

您可以使用capture_stdout捕获::微型抓住你的输出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;
Run Code Online (Sandbox Code Playgroud)


Bor*_*din 6

这可以在没有任何附加模块的情况下完成

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;
Run Code Online (Sandbox Code Playgroud)