Tôi nghĩ rằng nếu tôi lo lắng, tôi sẽ xây dựng các phiên bản nổi bật của Perl trên máy của tôi và kiểm tra chúng. Trên thực tế, đó là nhiều hơn hoặc ít hơn những gì tôi làm anyway. Máy Solaris 10 của tôi có:
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
Vì vậy, 5.5.3, 5.6.1, 5.8.7, 5.8.8, 5.10.0 và 5.10.1 được cài đặt; Tôi có nguồn cho các phiên bản khác quá:
-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 1Feb 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 hỏi:
Bạn có một kịch bản mà sẽ chạy một module cụ thể, kịch bản hay kiểm tra đơn vị chống lại tất cả các phiên bản theo thứ tự và đối chiếu kết quả? Một tiện ích như vậy có thể thực sự tiện dụng như một CGI chroot/sandboxed.
Không, nhưng tôi không cần nó. Đó là cơ bản trivially, mặc dù:
for perl in /usr/perl/v5.*.?
do
echo $(basename $perl)
$perl/bin/perl "[email protected]"
done
Về cơ bản, đối với mỗi người trong số các thư mục Perl trong/usr/perl /, chạy perl từ thư mục bin trên tập hợp các đối số. Xem đầu ra ...
Khó khăn trong việc quyết định điều gì cấu thành thông qua/lỗi. Rõ ràng, cốt lõi của vòng lặp có thể là:
if $perl/bin/perl "[email protected]" >/dev/null 2>&1
then echo ok $perl
else echo not ok $perl
fi
Đó là yếu ớt giống với TAP đầu ra.Để làm cho nó chính thức tương đương (sử dụng bash hoặc 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 "[email protected]" >/dev/null 2>&1
then echo ok $test - $perl
else echo not ok $test - $perl
fi
done
Dưới đây là một ví dụ về chạy nó:
$ 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
$
Điều đó cho thấy một hạn chế trong kịch bản shell và cơ sở vật chất globbing của họ (Tôi muốn để giới hạn 'ngôi sao' thành một dãy số). Perl không thực hiện được vì thư mục bin không chứa bản sao của Perl; Tôi cần phải tiết kiệm không gian tại một số điểm! Nó sẽ không khó để chuyển đổi kịch bản shell thành một kịch bản Perl, tất nhiên.
+1 Đề xuất tuyệt vời –
+1 từ tôi quá –
+1 điều này khá tuyệt vời! – rjh