2010-03-23 23 views
24

Có dịch vụ nào tương tự như codepad cho phép bạn kiểm tra cấu trúc Perl trên phiên bản cũ của perl không?Làm cách nào để kiểm tra khi một đối tượng địa lý được thêm vào Perl?

Lý tưởng nhất, một hệ thống mà bạn có thể nhập một biểu thức và nó sẽ cho bạn biết phiên bản cũ nhất của perl mà nó sẽ làm việc.

Tất nhiên có thể sử dụng CPANTS cho việc này, nhưng điều đó có vẻ như lạm dụng dịch vụ (nếu chỉ để làm cho BackPan lớn hơn). Và có thể mất vài ngày/tuần để có được phạm vi kiểm tra phong nha trên các phiên bản cũ.

Trả lời

21

Bạn có thể tìm thấy Perl::MinimumVersion hữu ích. Sử dụng tiện ích perlver được cung cấp để quét mã của bạn.

+0

+1 Đề xuất tuyệt vời –

+0

+1 từ tôi quá –

+0

+1 điều này khá tuyệt vời! – rjh

3

Tôi biết perlcritic có khả năng tìm thấy một vài trường hợp, nhưng nói chung bạn sẽ phải tìm kiếm nó trong google hoặc trong các tập tin perldelta. Đặc biệt, bạn có thể muốn nhìn vào đồng bằng châu thổ cho 5.65.85.10 và thậm chí sắp tới 5.12

3

Nếu bạn đang tìm kiếm khi một mô-đun được giới thiệu với lõi Perl, bạn có thể sử dụng Module::CoreList.

Nếu bạn muốn giúp phát triển hệ thống như codepad cho Perl, hãy tìm kiếm "thử nghiệm PITA".

Cụ thể, nếu bạn muốn tiện ích tải xuống và cài đặt một số tệp nhị phân Perl để kiểm tra mã của mình, bạn có thể xem các chương trình trong PITA-Setup-Perl/bin.

+0

Tôi thấy 'corelist' rất hữu ích, nhưng tiếc là nó không nói * phiên bản * của mô-đun được phân phối với mỗi phân phối perl. ví dụ. gần đây tôi đã sử dụng một số tính năng mới trong Hash :: Util như được mô tả trong tài liệu perldoc.perl.org, chỉ để khám phá sau đó giao diện tôi muốn sử dụng không xuất hiện cho đến sau phiên bản (0.05) được giao phiên bản Perl tôi sử dụng trong sản xuất (5.8.5). :( – Ether

+0

Module :: CoreList có thông tin phiên bản –

8

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.

+0

Đó là một danh sách ấn tượng! sẽ chạy một mô-đun cụ thể, kịch bản hoặc kiểm tra đơn vị đối vớ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 – Ether

+2

Đồng thời xem bài đăng của tôi trong Perler hiệu quả: http: // www. effectiveperlprogramming.com/blog/92 –

+0

@brian d foy: Bài viết thú vị. Tôi sử dụng một loo hệ thống tương đương với Perl, Python, GCC, Tcl/Tk, Git, OpenSSL và (phần nào vẫn còn rộng rãi hơn) cho các sản phẩm Informix mà tôi làm việc cũng như. Các công cụ Informix là khó hiểu vì tôi phải đối phó với 32-bit vs 64-bit môi trường quá. –

Các vấn đề liên quan