2013-02-24 9 views
8

Mam 5.14.2 zainstalowany w moim komputerze, ale kiedy próbuję wykonać polecenie drukowania z say słowo kluczowe daje mi błąd.dlaczego muszę określić "use feature: 5.1x", nawet jeśli mój zainstalowany perl jest 5.14?

Mam użyć słowa kluczowego use, aby program działał bezbłędnie.

#!/usr/bin/perl 
use feature ':5.10'; 
say "hello"; 

5.14.2 jest najnowszy w porównaniu do 5.010, więc powinien mieć domyślnie włączone wszystkie te funkcje? jaki jest sens w określaniu wersji przy użyciu słowa kluczowego use?

Odpowiedz

5

Zapobiega konfliktom z istniejącymi programami zapisanymi w Perlu.

Na przykład, napisałem program dla Perla 5.6, który zdefiniował podprogram o nazwie say.

use strict; 
use warnings; 
sub say { print 1; } 
say(); 

To działa dobrze (wyprowadzanie) i nadal działa w perls które zawierają funkcję say.

Teraz włącz natywną say i zobaczyć, co się dzieje:

use v5.14; 
use strict; 
use warnings; 
sub say { print 1; } 
say(); 

Teraz przewraca z * Stosowanie niezainicjowanych wartości $ _ w powiedzieć co - linia 5. *

Trzeba use feature lub use v5.xx, aby nowe funkcje mogły być ładowane bezpiecznie, tj. gdy autor wie, że chce z nich korzystać.

+0

oznacza to niezależnie od najnowszej wersji perla, a wszystkie będą działały w jeden wspólny sposób, chyba że określisz, której wersji użyć. a gdy już określisz wersję, włączą ci te funkcje. Czyli to oznacza, że ​​moje wersje 5.8 i 5.10 będą takie same bez funkcji "używaj" polecenia – chidori

+0

To jest podstawowa idea, tak. Jednak funkcja lub wersja służy wyłącznie do włączania NOWYCH funkcji. Błędy lub błędne funkcje są czasami usuwane w cyklu wycofywania. Tak więc, co było ostrzeżeniem w 5.8 może być niepowodzeniem w 5.10. – stu42j

10

Perl stara się zachować kompatybilność wsteczną. Jest całkiem możliwe, że istniejące skrypty mogą mieć podprogramy o nazwie say. Trwa dyskusja, czy niektóre przyszłe wersje Perla powinny powstrzymać te wysiłki i usprawnić ich działanie. Zobacz na przykład: naming and numbering perl.

Powiązane problemy