2013-04-24 32 views
-2

我有Perl代碼來生成一個已存儲在兩個單獨的.txt文件,我想執行測試我的模塊時,但我似乎無法將它們讀入測試。無法讀取文件到perl模塊測試?

我已經使用內置的文件閱讀器嘗試:open FILE, 'file.txt'

storableretrieve('file')其中file是一個可存儲文件

File::Slurpread_file('file.txt')

這些工作都不在測試文件(.t格式)中,但它們在同一目錄中的正常.pl文件中工作。我如何使它在測試中工作?我會用__DATA__的選擇,但我有兩個文件,而且它們已經在哈希格式,所以正好可以直讀

編輯:我的代碼 -

use Data::Dumper; 
use File::Slurp; 

my $table1 = read_file('tab1.txt'); 
my $table2 = read_file('tab2.txt'); 
print Dumper($table1); 
print Dumper($table2); 

我在測試文件輸出:

$VAR1 = ''; 
$VAR1 = ''; 

,並在test.pl文件$VAR1$VAR2酷似「.TXT」文件的內容,如我期望的那樣。

EDIT2:

忘記,有裏面的文件哈希值,這也不要緊,我想讀的test.txt文件我在這一個隨機字符串製作,並與出來:

$VAR1 = 'Testing commit - part 12'; 

這似乎表明它正在讀取位於不同位置的文件,因此沒有找到我的文件。我試圖將該目錄作爲lib,但沒有奏效。

+0

「哈希」是一種數據結構,而不是文件格式。你不能有「哈希存儲在文件中」。你的文件實際上包含什麼? – ikegami 2013-04-24 08:48:53

+1

說它在'.t'中工作,但不是'.pl'是錯誤的。你誤診了這個問題。這是別的,因爲Perl根本沒有看擴展。 '.pl','.pm','.t','.foo'或者根本沒有擴展名都與Perl相同。 – ikegami 2013-04-24 08:51:47

+0

我只說我看到的...在每個文件中我有一個散列寫在預期的方式,你會寫一個哈希''名稱'= {'key1'=>'val1'};'格式(除外它更大)。如果這有所幫助,它們就是哈希引用。當我從'test.pl'文件中的read_in打印時,我得到的散列是輸出的,但是當我在'test.t'文件中嘗試相同的代碼時,我得到''''。 – dgBP 2013-04-24 08:56:00

回答

0

您正在嘗試執行Perl代碼。我猜測代碼不是模塊(不使用package),所以你會使用do而不是use/require

現在您只需找到相對於腳本位置的文件。爲此,有$FindBin::RealBin

use FindBin qw($RealBin); 
use lib "$RealBin/.."; 

our $VAR1; 
do("file.txt") 
    or die "Error executing file.txt: [email protected]"; 

... $VAR1 ... 

確保從您的文件(1;通過結束它,例如)返回真值。

+0

我不明白在這裏使用'do'。我的文本文件不包含這樣的代碼;只是一個數據結構。你能做'數據結構嗎? 我的代碼是被測試模塊的代碼,我想在這些文件中的數據反饋,所以我可以檢查輸出測試的測試文件中。 – dgBP 2013-04-24 09:31:14

+0

你甚至可以忘記,它是一個文本文件,我不,如果我把我的數據在'storable'文件,並使用該方法來讀取它得到任何輸出。 – dgBP 2013-04-24 09:33:04

+0

@bladepanthera:你的問題中留言說,數據存儲在文件'「名」 = {「鍵1」 =>「VAL1」}中;'這_is_代碼,它需要運行指定' {key1 =>'val1'}'作爲散列鍵'name'。 – 2013-04-24 09:49:15