2017-10-10 7 views
0

を変更することなく、機能の出力を印刷:たPerl:店は、私は、サブ・ルーチンを持っている機能

sub application(**arguments**) 
{ 
     print ("found the black ship"); 
     # many more print statements. 
     return 18000; 
} 

私は、ファイルに上記のサブルーチンが印刷されたデータを取得する必要があります。

PS:関数変数を変更することはできません。機能にアクセスすることだけができます。

+0

(あなたは非常に最近のPerlを持っていない限り、Perlは、あなたがここに暗黙の道のような関数定義の引数をサポートしていないと、[ 'signatures'機能がオン] https://perldoc.perl.org/ perlsub.html#Signatures)。 – simbabque

答えて

1
関数を呼び出す前に、ファイルにSTDOUTをリダイレクトすることで何が本当にしたい

OKは、当時、後でそれをリダイレクトします。

# open filehandle log.txt 
open (my $LOG, '>>', 'log.txt'); 

# select new filehandle 
select $LOG; 

application(); 

# restore STDOUT 
select STDOUT; 
+0

ファイルハンドルでSTDOUTをスワップする他の方法はありますか?私の現在の状況では、selectは認識できない関数として扱われます.Iamはperlのハイブリッド形式のファイルを処理しています。 – vikram9866

1

あなたが再オープンすることができますSTDOUT(あなたががそれを最初に閉じる必要があります) 。

close STDOUT; 
open STDOUT, '>>', 'somefile.txt' or die $!; 
application(...); 

これはすべてopen()のマニュアルに記載されています。

2

"デフォルトのファイルハンドル"に印刷していて、STDOUTに明示的には印刷しないので、メソッドを呼び出す前にselectに電話することができます。 STDOUTファイルハンドルを使用することはありません。

my $output = ''; 
open my $capture, '>', \$output; 
my $old_fh = select $capture; 

application(...); 

select $old_fh; # restore default file handle, probably STDOUT 
close $capture; 
print "The output of application() was: $output\n"; 
関連する問題