如何测试何时将功能添加到Perl?

Eri*_*rom 26 testing perl version

是否有任何类似于键盘的服务允许您在旧版本的perl上测试Perl构造?

理想情况下,您可以在其中输入表达式的系统,它将告诉您它将使用的最旧版本的perl.

当然可以使用CPANTS,但这似乎是滥用服务(如果只是为了使BackPan更大).可能需要几天/几周才能在旧版本上获得不错的测试覆盖率.

dao*_*oad 23

您可能会发现Perl :: MinimumVersion很有帮助.使用提供的perlver实用程序扫描您的代码.

  • 请注意,Perl :: MinimumVersion非常有限.如果源代码已经提供了提示,它可能会帮助您找到最低版本,但如果没有提示,它并不是很好.基于正则表达式功能检测perl版本也很差. (5认同)

Jon*_*ler 9

我想如果我担心,我会在我的机器上构建Perl的显着版本并测试它们.实际上,无论如何,这或多或少都是我做的.我的Solaris 10机器有:

lrwxrwxrwx   1 jleffler rd            26 Mar  6  2008 v5.10.0 -> v5.10.0-32bit-multiplicity
drwxr-xr-x   3 jleffler rd           512 Jan 10  2008 v5.10.0-32bit
drwxr-xr-x   6 jleffler rd           512 Mar  7  2008 v5.10.0-32bit-multiplicity
drwxr-xr-x   3 jleffler rd           512 Jan 10  2008 v5.10.0-64bit
lrwxrwxrwx   1 jleffler rd            13 Jan 29 21:07 v5.10.1 -> v5.10.1-64bit
drwxr-xr-x   6 jleffler rd           512 Jan 29 21:43 v5.10.1-64bit
drwxr-xr-x   5 jleffler rd           512 May  6  2003 v5.5.3
lrwxrwxrwx   1 jleffler RAND          11 Mar 21  2007 v5.6.1 -> v5.6.1-full
drwxr-xr-x   5 jleffler rd           512 May  6  2003 v5.6.1-full
drwxr-xr-x   5 jleffler rd           512 Feb  5  2008 v5.8.7-multi
lrwxrwxrwx   1 jleffler rd            19 Mar 24  2007 v5.8.8 -> v5.8.8-32bit-sun-cc
drwxr-xr-x   6 jleffler rd           512 Mar 25  2007 v5.8.8-32bit-sun-cc
drwxr-xr-x   5 jleffler rd           512 Feb 13  2006 v5.8.8-64bit-thread-multi
drwxr-xr-x   3 jleffler rd           512 Mar 20  2008 v5.8.8-gcc-3.4.6
Run Code Online (Sandbox Code Playgroud)

那么,安装了5.5.3,5.6.1,5.8.7,5.8.8,5.10.0和5.10.1; 我也有其他版本的来源:

-rw-r--r--   1 jleffler rd       2171936 Apr 12  2001 perl-5.004_04.tar.bz2
-rw-r--r--   1 jleffler rd       3023320 Aug 31  1999 perl-5.005_03.tar.bz2
-rw-r--r--   1 jleffler rd       12426022 Dec 18  2007 perl-5.10.0.tar.bz2
-rw-r--r--   1 jleffler rd       11608061 Jan 29 12:32 perl-5.10.1.tar.bz2
-rw-r--r--   1 jleffler rd       4430438 Mar 29  2000 perl-5.6.0.tar.bz2
-rw-r--r--   1 jleffler rd       4864306 Apr  8  2001 perl-5.6.1.tar.bz2
-rw-r--r--   1 jleffler rd       5142605 Aug 16  2005 perl-5.6.2.tar.bz2
-rw-r--r--   1 jleffler rd       8618487 Jul 18  2002 perl-5.8.0.tar.bz2
-rw-------   1 jleffler rd       9410641 Sep 29  2003 perl-5.8.1.tar.bz2
-rw-r--r--   1 jleffler rd       9424944 Nov  5  2003 perl-5.8.2.tar.bz2
-rw-r--r--   1 jleffler rd       9509716 Jan 14  2004 perl-5.8.3.tar.bz2
-rw-r--r--   1 jleffler rd       9598489 Apr 21  2004 perl-5.8.4.tar.bz2
-rw-r--r--   1 jleffler rd       9464689 Jul 19  2004 perl-5.8.5.tar.bz2
-rw-r--r--   1 jleffler rd       9693085 Nov 27  2004 perl-5.8.6.tar.bz2
-rw-r--r--   1 jleffler rd       9839086 Jun 15  2005 perl-5.8.7.tar.bz2
-rw-r--r--   1 jleffler rd       10123359 Feb 13  2006 perl-5.8.8.tar.bz2
-rw-r--r--   1 jleffler rd       11121414 Dec 14  2008 perl-5.8.9.tar.bz2
Run Code Online (Sandbox Code Playgroud)

@Ether问:

您是否有一个脚本可以按顺序对所有版本运行特定的模块,脚本或单元测试并整理结果?这样的实用程序可能非常方便,如chrooted/sandboxed CGI.

不,但我不需要它.不过,这基本上是微不足道的:

for perl in /usr/perl/v5.*.?
do
    echo $(basename $perl)
    $perl/bin/perl "$@"
done
Run Code Online (Sandbox Code Playgroud)

基本上,对于/ usr/perl /中的每个Perl目录,从给定参数集上的bin目录运行perl.观看输出......

困难在于决定通过/失败的构成.显然,循环的核心可能是:

    if $perl/bin/perl "$@" >/dev/null 2>&1
    then echo ok $perl
    else echo not ok $perl
    fi
Run Code Online (Sandbox Code Playgroud)

这与TAP输出有点类似.为了使它正式等效(使用bash或Korn shell):

test=0
max=$(ls -d /usr/perl/v5.*.? | wc -l | sed 's/ //g')
echo 1..$max
for perl in /usr/perl/v5.*.?
do
    ((test = test + 1))
    if $perl/bin/perl "$@" >/dev/null 2>&1
    then echo     ok $test - $perl
    else echo not ok $test - $perl
    fi
done
Run Code Online (Sandbox Code Playgroud)

这是运行它的一个例子:

$ ksh test.perl -e 'exit 0'
1..6
ok 1 - /usr/perl/v5.10.0
ok 2 - /usr/perl/v5.10.1
ok 3 - /usr/perl/v5.5.3
ok 4 - /usr/perl/v5.6.1
ok 5 - /usr/perl/v5.8.8
not ok 6 - /usr/perl/v5.8.8-gcc-3.4.6
$
Run Code Online (Sandbox Code Playgroud)

这显示了shell脚本及其通配设施的限制(我想将'star'限制为一系列数字).失败的Perl是这样做的,因为bin目录不包含Perl的副本; 我需要在某个时候节省空间!当然,将shell脚本转换为Perl脚本并不困难.

  • 另请参阅The Effective Perler中的帖子:http://www.effectiveperlprogramming.com/blog/92 (2认同)

sac*_*met 5

如果您要寻找将模块引入Perl核心的时间,可以使用Module :: CoreList

如果您想帮助开发Perl 键盘等系统,请搜索“ PITA测试”。

具体来说,如果您希望某个实用程序下载并安装许多Perl二进制文件来测试您的代码,则可以查看PITA-Setup-Perl / bin中的程序