2010-03-23 14 views
24

Czy są jakieś usługi podobne do codepad, które pozwolą ci przetestować konstrukcje Perla na starych wersjach perla?Jak mogę sprawdzić, kiedy funkcja została dodana do Perla?

Idealnie, system, w którym można wprowadzić wyrażenie i powie ci najstarszą wersję Perla, z którym będzie pracować.

Oczywiście można do tego celu użyć CPANTS, ale wydaje się, że jest to nadużycie usługi (choćby po to, aby powiększyć BackPan). I może zająć kilka dni/tygodni, aby uzyskać przyzwoite pokrycie testowe na starych wersjach.

Odpowiedz

21

Możesz znaleźć Perl::MinimumVersion pomocne. Użyj dostarczonego narzędzia perlver, aby zeskanować kod.

+0

+1 Doskonała rekomendacja –

+0

+1 ode mnie też –

+0

+1 to jest raczej niesamowite – rjh

3

Wiem, że perlcritic jest w stanie znaleźć kilka przypadków, ale generalnie będziesz musiał sprawdzić go w google lub w plikach perldelta. W szczególności, można zajrzeć do delt dla 5.65.8 i 5.10 a może nawet zbliżającej 5.12

3

Jeśli szukasz gdy moduł został wprowadzony do rdzenia Perl, można wykorzystać Module::CoreList.

Jeśli chcesz pomóc w opracowaniu systemu takiego jak codepad dla Perla, wyszukaj "Testowanie PITA".

W szczególności, jeśli chcesz, aby narzędzie pobierało i instalowało wiele plików binarnych Perla w celu przetestowania kodu, możesz przejrzeć programy w wersji PITA-Setup-Perl/bin.

+0

Uważam, że 'corelist' jest bardzo przydatna, ale niestety nie określa która * wersja * modułu jest dostarczana z każdą dystrybucją Perla. na przykład ostatnio korzystałem z nowych funkcji w Hash :: Util, jak opisano w dokumentacji perldoc.perl.org, ale później odkryłem, że interfejs, który chciałem użyć, pojawił się dopiero po wersji (0.05) dostarczonej z wersja Perla, której używam w produkcji (5.8.5). :( – Ether

+0

Moduł :: CoreList ma informacje o wersji –

8

Myślę, że gdybym był zaniepokojony, zbudowałbym istotne wersje Perla na mojej maszynie i przetestowałem je. Właściwie to mniej więcej to, co robię. Moja maszyna ma 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 

Tak, to 5.5.3, 5.6.1, 5.8.7, 5.8.8, 5.10.0 i 5.10.1 zainstalowany; Mam źródło dla innych wersji TOO:

-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 zapytał:

Czy masz skrypt, który będzie działał danego modułu, skrypt lub test jednostki przed wszystkimi wersjami w sekwencji i zestawiać wyniki? Takie narzędzie może być bardzo przydatne jako chrootowany/piaskowany CGI.

Nie, ale nie potrzebowałem tego. Jest to w zasadzie trywialnie, ale:

for perl in /usr/perl/v5.*.? 
do 
    echo $(basename $perl) 
    $perl/bin/perl "[email protected]" 
done 

W zasadzie dla każdego z katalogów Perl w/usr/Perl/uruchom perla z katalogu bin na dany zestaw argumentów. Zobacz wynik ...

Trudność polega na decydowaniu, co stanowi zaliczenie/niepowodzenie. Oczywiście, rdzeń pętli mogą być:

if $perl/bin/perl "[email protected]" >/dev/null 2>&1 
    then echo ok $perl 
    else echo not ok $perl 
    fi 

to słabo podobny do wyjścia TAP.Aby uczynić go formalnie równoważne (przy użyciu bash lub 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 

Oto przykład prowadzenia go:

$ 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 
$ 

To pokazuje ograniczenie w skryptów powłoki i ich obiektów masek (chciałbym ograniczyć "gwiazdkę" do serii cyfr). Perl, który się nie powiedzie, robi to, ponieważ katalog bin nie zawiera kopii Perla; Musiałem w pewnym momencie zaoszczędzić miejsce! Oczywiście nie byłoby trudno przekonwertować skrypt powłoki na skrypt Perla.

+0

To imponująca lista! Czy masz skrypt, który uruchomi konkretny moduł, skrypt lub test jednostkowy względem wszystkich wersji w sekwencji i zestawi wyniki? Takie narzędzie może być naprawdę przydatne jako chrootowany/piaskowany CGI. – Ether

+2

Zobacz także mój post w The Effective Perler: http: // www. effectiveperlprogramming.com/blog/92 –

+0

@brian d foy: Interesujący artykuł. Zatrudniam loo system równoważny dla Perla, Pythona, GCC, Tcl/Tk, Git, OpenSSL i (nieco bardziej nieruchome) dla produktów Informix, nad którymi pracuję tak samo dobrze jak z. Elementy Informix są mylące, ponieważ mam do czynienia również ze środowiskami 32-bitowymi i 64-bitowymi. –

Powiązane problemy