是否有类似于codepad的服务允许您在旧版本的perl上测试Perl构造?
理想情况下,您可以输入一个表达式的系统,它会告诉您它将使用的最早版本的perl。
当然可以使用CPANTS,但这似乎是滥用服务(如果只是为了使BackPan更大)。可能需要几天/几周才能在旧版本上获得合适的测试覆盖率。
答案 0 :(得分:22)
您可能会发现Perl::MinimumVersion有帮助。使用提供的perlver实用程序扫描您的代码。
答案 1 :(得分: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
所以,安装了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
@Ether问:
您是否有一个脚本可以按顺序对所有版本运行特定的模块,脚本或单元测试并整理结果?这样的实用程序可能非常方便,如chrooted / sandboxed CGI。
不,但我不需要它。不过,这基本上是微不足道的:
for perl in /usr/perl/v5.*.?
do
echo $(basename $perl)
$perl/bin/perl "$@"
done
基本上,对于/ usr / perl /中的每个Perl目录,从给定参数集上的bin目录运行perl。观看输出......
困难在于决定通过/失败的构成。显然,循环的核心可能是:
if $perl/bin/perl "$@" >/dev/null 2>&1
then echo ok $perl
else echo not ok $perl
fi
这与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
以下是运行它的示例:
$ 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
$
这显示了shell脚本及其通配设施的限制(我想将'star'限制为一系列数字)。失败的Perl是这样做的,因为bin目录不包含Perl的副本;我需要在某个时候节省空间!当然,将shell脚本转换为Perl脚本并不困难。
答案 2 :(得分:4)
答案 3 :(得分:4)
如果您正在寻找将模块引入核心Perl的时间,可以使用Module::CoreList。
如果您想为Perl开发类似codepad的系统,请搜索“PITA测试”。
具体来说,如果您希望实用程序下载并安装许多Perl二进制文件来测试您的代码,您可以查看PITA-Setup-Perl/bin中的程序。