2010-12-23 63 views
0

我寫了一個模塊,只是爲了將文件分成訓練集和測試集。輸出很好,但如果兩個引用變量@$test@$training的輸出被重定向到兩個不同的文件,那對學生來說真的很容易。下面是代碼:將derefrenced變量的輸出打印到文件中

use Cut; 

my($training,$test)=Cut::cut_80_20('data.csv') ; 
print"======TRAINING======\n"."@$training\n"; 
print"======TEST==========\n"." @$test\n"; 
+0

等等,我有這個權利嗎?你是在教Perl嗎? – 2010-12-23 16:25:58

回答

2

這很容易:

open my $fh1, '>', "training.out" or die "failed to open training.out ($!)"; 
print $fh1 "======TRAINING======\n"; 
print $fh1 "@$training\n"; 
close $fh1; 
open my $fh2, '>', "test.out" or die "failed to open test.out ($!)"; 
print $fh2 "======TEST==========\n"; 
print $fh2 "@$test\n"; 
close $fh2; 

注意沒有在打印報表的文件句柄後一個逗號。您可以根據需要添加換行符等。

3

在要輸出的數據之前,打印需要一個可選的文件句柄。打開文件並打印:

open(my $training_fh, '>', 'training.csv') or die "Couldn't open training.csv: $!"; 
print $training_fh "======TRAINING======\n"."@$training\n"; 
open(my $test_fh, '>', 'test.csv') or die "Couldn't open test.csv: $!"; 
print $test_fh "======TEST==========\n"." @$test\n"; 
+0

謝謝,只是想通了,這裏是代碼使用Cut; my($ training,$ test)= Cut :: cut_80_20('data.csv'); my @ tr = @ $ training; my @ te = @ $ test; foreach(@tr) { open FH,「>> trainingset」or die「boo」; print FH $ _; } 關閉FH; foreach(@te) open FG,「>> testset」或die「boo」; print FG $ _; } close FG; – hari 2010-12-23 07:59:12