2017-05-30 14 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

相關問題