Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl测试脚本的操作系统特定测试_Perl_Testing_Winapi_Perl Module - Fatal编程技术网

Perl测试脚本的操作系统特定测试

Perl测试脚本的操作系统特定测试,perl,testing,winapi,perl-module,Perl,Testing,Winapi,Perl Module,是否有一种更优雅的方法来编写测试脚本中依赖于O/S的部分 请参考注释行下方的代码 背景:模块Perl::Tags为VIM创建一个标记文件。在Win32上,目录分隔符是“\”,但在其他操作系统上,它是“/”。Vim的Perl支持模块似乎能够非常愉快地读取标记文件,因此似乎没有必要修改该模块 #!/usr/bin/perl -w use strict; use warnings; use Data::Dumper; use Test::More tests => 6; use FindBin

是否有一种更优雅的方法来编写测试脚本中依赖于O/S的部分

请参考注释行下方的代码

背景:模块Perl::Tags为VIM创建一个标记文件。在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');
}

也许您可以一直使用Linux风格的斜杠,因为:

在编写必须在NT和UNIX下运行的Perl脚本时,必须注意许多重要问题。首先是路径名的问题。在DOS、Windows NT和Windows 95中,使用反斜杠运算符指定路径名,而在UNIX中使用正斜杠运算符。Win32 Perl端口允许正斜杠或反斜杠。在路径名中使用前斜杠的Perl脚本比使用反斜杠的脚本更容易移植。此外,Perl脚本必须在字符串中使用反斜杠两次,才能从Perl解释器中转义反斜杠的一个实例。驱动器号不必更改

例如,可以使用以下任一选项设置以下路径名:

$myFile = "E:/users/default/datafile.txt";

$myFile = "E:\\users\\default\\datafile.txt";
(来自)



如果您确定不能始终使用Linux风格,可以尝试使用CPAN模块或。查看以获取更多信息。

也许您可以始终使用Linux样式的斜杠,因为:

在编写必须在NT和UNIX下运行的Perl脚本时,必须注意许多重要问题。首先是路径名的问题。在DOS、Windows NT和Windows 95中,使用反斜杠运算符指定路径名,而在UNIX中使用正斜杠运算符。Win32 Perl端口允许正斜杠或反斜杠。在路径名中使用前斜杠的Perl脚本比使用反斜杠的脚本更容易移植。此外,Perl脚本必须在字符串中使用反斜杠两次,才能从Perl解释器中转义反斜杠的一个实例。驱动器号不必更改

例如,可以使用以下任一选项设置以下路径名:

$myFile = "E:/users/default/datafile.txt";

$myFile = "E:\\users\\default\\datafile.txt";
(来自)


如果您确定不能始终使用Linux风格,可以尝试使用CPAN模块或。查看以获取更多信息。

,它们的构建正是为了解决这些特定于平台的问题

以下是你想要做的吗

#!/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',
);
并且是为了解决这些特定于平台的问题而构建的

以下是你想要做的吗

#!/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',
);

根据SinanÜnür的指导进行修订——如果

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再次禁用模式元字符

根据SinanÜnür的指导进行修订——如果

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再次禁用模式元字符

感谢您指出Path::Class。文件字符串化(“”,'Test.pm')根据需要返回\Test.pm或/Test.pm。不幸的是,qr{}需要\\Test.pm。我将在下面发布临时解决方案供您评论。这正是我试图做的,除了所有测试都在Test.pm上进行,因此无需声明我的$file。感谢您指出Path::Class。文件字符串化(“”,'Test.pm')根据需要返回\Test.pm或/Test.pm。不幸的是,qr{}需要\\Test.pm。我将在下面发布临时解决方案供您评论。这正是我试图做的,除了所有测试都在Test.pm上进行,因此无需声明我的$file。谢谢。请参考下面对思南的评论。@Igor:不客气。删除了我的评论,因为它们不再相关。谢谢。请参考下面对思南的评论。@Igor:不客气。删除了我的评论,因为它们不再相关。
qr{Test\t\S+\Q$file\E\t/package Test;/}
您不需要经历所有困难。太棒了。工作是一种享受。非常感谢你。上一次尝试值得投反对票!注意,没有必要用粗体字提及我的名字。另外,我认为您在当前版本中犯了某种剪切粘贴错误。看一看,看看你是不是在说你的意思。去掉了Sinan的粗体属性,并修复了剪切和粘贴错误
qr{Test\t\S+\Q$file\E\t/package Test;/}
你没有必要经历所有的麻烦。太棒了。工作是一种享受。非常感谢你。上一次尝试值得投反对票!注意,没有必要用粗体字提及我的名字。另外,我认为您在当前版本中犯了某种剪切粘贴错误。看看它,看看你是不是在说你的意思。把黑体字从锡南语中去掉,并修复了剪切和粘贴错误