2011-06-20 10 views
22

Co dokładnie włącza "użycie 5.014"?Perl: Jakie dokładnie funkcje mają "używać 5.014"?

Proszę, proszę, kopiuj tutaj & wkleić tutaj, ponieważ nie mogłem go znaleźć w żadnym perldoc. (może jestem ślepy). W "funkcji perldoc" są tylko niektóre rzeczy dla 5.10. Lub wskaż mi jakiś URL.

thanx.

EDYTOWANIE:

Najpierw sprawdź, na co odpowiadasz. Na przykład: spróbuj tego:

use 5.008; 
$s=1; 
say "hello"; 

Dostaniesz komunikat o "powiedzieć", ponieważ Perl 5.8 nie wiem "powiedzieć"

potem spróbuj tego:

use 5.014; 
$s=1; 
say "hello"; 

dostaniesz błąd

Global symbol "$s" requires explicit package name 

tak, "użytkowania 5,014" umożliwiającuse strict i use feature 'say'; - domyślnie.

Odpowiedz

27

Oprócz komunikatów o błędach, które otrzymasz, jeśli używasz use 5.014 ze starszą wersją Perla, możesz znaleźć listę funkcji włączonych do odczytu source code of feature. Odpowiednia część znajduje się w górnej części:

my %feature_bundle = (
    "5.10" => [qw(switch say state)], 
    "5.11" => [qw(switch say state unicode_strings)], 
    "5.12" => [qw(switch say state unicode_strings)], 
    "5.13" => [qw(switch say state unicode_strings)], 
    "5.14" => [qw(switch say state unicode_strings)], 
); 

Ścisła część bitowa jest nieco głębiej ukryta w kodzie dla samego interpretera. Jeśli spojrzeć na pp_ctl.c for tag v5.11.0:

/* If a version >= 5.11.0 is requested, strictures are on by default! */ 

if (PL_compcv && vcmp(sv, sv_2mortal(upg_version(newSVnv(5.011000), FALSE))) >= 0) { 
    PL_hints |= (HINT_STRICT_REFS | HINT_STRICT_SUBS | HINT_STRICT_VARS); 
} 
+0

Thanx dla wskaźnika. Tylko nie widzi w źródle "use strict;". – jm666

+0

Doskonała odpowiedź - dziękuję za znalezienie źródła, które pomaga określić, co przynosi każdy pakiet. Jedno pytanie: "strict" jest również automatycznie włączane (od 5.12, jak pamiętam). Czy wiesz, gdzie/kiedy to się stanie?(To nie jest wymienione w kodzie źródłowym 'feature', o ile mogę to stwierdzić.) – Telemachus

+0

Wspaniale - dziękuję. (Wasz naprawdę powinien być akceptowaną odpowiedzią.) – Telemachus

4

use x.x.x Pragma robi włącz niektórych funkcji, i to dość łatwe do sprawdzenia to:

#!/usr/bin/env perl 
use warnings; 
use 5.14.0; 

say "hello world!" 

działa świetnie; wyświetla "cześć świat!".

#!/usr/bin/env perl 
use warnings; 
# use 5.14.0; 

say "hello world!" 

Płonąca śmierć; wyświetla ten komunikat o błędzie:

Unquoted string "say" may clash with future reserved word at foo line 5. 
String found where operator expected at foo line 5, near "say "hello world!"" 
    (Do you need to predeclare say?) 
syntax error at foo line 5, near "say "hello world!"" 
Execution of foo aborted due to compilation errors. 

Nie jestem jednak w 100% pewien, które funkcje są włączone od wersji 5.14.0. Uważam, że otrzymujesz say, state, switch, unicode_strings i strict.

4

W nowszych Perls (poczynając od 5.10 myślę) use 5.x robi niejawny use feature ':5.x' Odczytywanie przez perldeltas dla 5.12 & 5.14 widzę funkcja związana Unicode dodanej w 5.12, ale to wydaje się, że nic nowego nie dodano w 5.14.

+0

THANX za wskazanie mnie do" deltas ", gdzie: Użycie składni VERSION użycia z numerem wersji większym lub równym 5.11.0 spowoduje leksykalne zwężenie dokładnie tak, jak użyłoby strict (oprócz włączania funkcji). THANX !!! – jm666

+0

zobacz także tę odpowiedź: http://stackoverflow.com/questions/6050031/why-are-use-warnings-use-strict-not-default-in-perl/6050340#6050340 –

Powiązane problemy