【问题标题】:Can't read in files to perl module test?无法将文件读入 perl 模块测试?
【发布时间】:2013-04-24 08:44:02
【问题描述】:

我有用于生成 a 的 Perl 代码存储在两个单独的 .txt 文件中,我想在测试我的模块时执行这些文件,但我似乎无法将它们读入测试。

我尝试过使用内置文件阅读器:open FILE, 'file.txt'

storable: retrieve('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,但这不起作用。

【问题讨论】:

  • “哈希”是一种数据结构,而不是一种文件格式。您不能将“哈希存储在文件中”。您的文件实际上包含什么?
  • 说它在.t 中有效但在.pl 中无效是错误的。你误诊了问题。这是另外一回事,因为 Perl 根本不考虑扩展。 .pl.pm.t.foo 或根本没有扩展对 Perl 来说都是一样的。
  • 我只是说我所看到的......在每个文件中,我都有一个哈希值,按照预期的方式写入哈希值'name' = { 'key1' => 'val1' }; 格式(除非它更大)。如果这有所作为,它们就是哈希引用。当我从“test.pl”文件中的 read_in 打印时,我得到了书面输出的哈希值,但是当我在“test.t”文件中尝试相同的代码时,我得到了''
  • 请分享您的代码。
  • 如果您提供用于读取“哈希”文件的代码,则更容易理解问题的根源。

标签: perl testing readfile


【解决方案1】:

您正在尝试执行 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: $@";

... $VAR1 ...

确保从您的文件中返回一个真值(例如,以1; 结尾)。

【讨论】:

  • 这里我不明白do的用法。我的文本文件不包含这样的代码;只是一个数据结构。你能“做”一个数据结构吗?我的代码在测试模块代码的测试文件中,我想通过在这些文件中输入数据来测试它,以便检查输出。
  • 你甚至可以忘记它是一个文本文件,如果我将我的数据放在storable 文件中并使用该方法读取它,我不会得到任何输出。
  • @bladepanthera:您在对问题的评论中说,数据以'name' = { 'key1' => 'val1' }; 的形式存储在文件中,这 代码,需要运行它来分配@ 987654333@ 到哈希键 name
  • @DaveSherohman,可能是这样,但目前实际上不是我的问题。它甚至似乎找不到我要打开的文件。运行 do 会返回错误。
猜你喜欢
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-18
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 2023-02-06
相关资源
最近更新 更多