我正在编写一个Perl脚本,我在其中读取包含Perl代码段和非Perl数据的文件.
处理完文件后,我将它们写入临时文件(生成的脚本),然后使用eval命令执行.我不想单独运行生成的脚本,因为我需要使用主脚本中的变量在生成的脚本中进行插值.
我需要将eval命令的输出重定向到文件.有关如何实现这一目标的任何建议?
脚本中的步骤:
READ_FILE
处理文件
使用临时文件名回写
读临时文件(my $file_name = read_file('temp_file_name'))
eval(eval $file_name)
感谢帮助.
您可以使用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)
这可以在没有任何附加模块的情况下完成
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)