是否有更优雅的方法来编写测试脚本中与O/S相关的部分?
请参阅注释行下面的代码。
背景:模块Perl::tag为创建一个标记文件。在Win32上,目录分隔符是"\“,而在其他操作系统上是"/”。Vim的Perl支持模块似乎非常高兴地读取标记文件,因此似乎不需要修改该模块。
#!/usr/bin/perl -w
use strict; use warnings;
use Data::Dumper;
use Test::More tests => 6;
use FindBin qw($Bin);
BEGIN {
use_ok( 'Perl::Tags' );
}
my $naive_tagger = Perl::Tags::Naive->new( max_level=>1 );
ok (defined $naive_tagger, 'created Perl::Tags' );
isa_ok ($naive_tagger, 'Perl::Tags::Naive' );
isa_ok ($naive_tagger, 'Perl::Tags' );
my $result =
$naive_tagger->process(
files => [ "$Bin/Test.pm" ],
refresh=> 1
);
ok ($result, 'processed successfully' ) or diag "RESULT $result";
# Other tests also fail because \Test.pm on Win32 vs /Test.pm on Linux/ OS X
if ( $^O =~ /MSWin32/ ) {
like ($naive_tagger, qr{Test\t\S+\\Test.pm\t/package Test;/} , 'package line');
} else {
like ($naive_tagger, qr{Test\t\S+/Test.pm\t/package Test;/} , 'package line');
}发布于 2009-10-26 11:41:17
档案::Spec和路径::类正是为了解决这些特定于平台的问题而构建的。
以下是你想做的事情吗?
#!/usr/bin/perl
use strict; use warnings;
use Test::More tests => 6;
use FindBin qw($Bin);
use File::Spec::Functions qw(catfile catpath rootdir);
BEGIN {
use_ok( 'Perl::Tags' );
}
my $naive_tagger = Perl::Tags::Naive->new(max_level => 1);
ok (defined $naive_tagger, 'created Perl::Tags');
isa_ok ($naive_tagger, 'Perl::Tags::Naive');
isa_ok ($naive_tagger, 'Perl::Tags');
my $result =
$naive_tagger->process(
files => [ catfile($Bin, 'Test.pm') ],
refresh => 1
);
ok ($result, 'processed successfully' ) or diag "RESULT $result";
my $file = catfile(rootdir, 'Test.pm');
# or $file = catpath('C:', rootdir(), 'Test.pm')
# depending on what you mean.
like($naive_tagger
qr{Test\t\S+\Q$file\E\t/package Test;/},
'package line',
);发布于 2009-10-26 11:35:19
也许您可以一直使用Linux样式的斜杠,因为:
在编写必须在NT和UNIX下运行的Perl脚本时,必须注意许多重要问题。首先,有路径名称问题。在DOS、Windows NT和Windows 95中,可以使用反斜杠操作符指定路径名,而在UNIX中则使用正斜杠运算符。Win32 Perl端口允许正斜杠或反斜杠。在路径名中使用正斜杠的Perl脚本比使用反斜杠的脚本更可能是可移植的。此外,Perl脚本必须在字符串中使用两次反斜杠,才能从Perl解释器中转义反斜杠的一个实例。驱动器的字母不需要改变。 例如,可以使用以下任一项设置下列路径名: $myFile =“E:/user/default/datafile.txt”;$myFile = "E:\users\default\datafile.txt";
(来自Perl 5释放)
如果您确信不能始终使用Linux样式,则可以尝试使用CPAN模块档案::Spec或路径::类。查看“混合Unix/Windows路径的CPAN模块”--关于Perl僧侣的讨论以获得更多信息。
发布于 2009-10-26 12:59:27
修订后的指导方针从锡南于纽-没有必要做操作系统特定的测试,如果
like ($naive_tagger, qr{Test\t\S\Test.pm\t/package Test;/} , 'package line');替换为
like ($naive_tagger, qr{Test\t\S+\QTest.pm\E\t/package Test;/} , 'package line');\Q (禁用)模式元字符直到\E
\E禁用模式元字符
https://stackoverflow.com/questions/1624253
复制相似问题