2013-02-24 3 views
8

Ich habe 5.14.2 in meinem Computer installiert, aber wenn ich versuche, eine Druckanweisung mit say Schlüsselwort auszuführen, gibt es mir einen Fehler.Warum muss ich "use feature: 5.1x" angeben, auch wenn meine installierte Perl 5.14 ist?

Ich habe mit dem Schlüsselwort use gehen, um das Programm ohne Fehler zu machen.

5.14.2 ist spätestens im Vergleich zu 5.010, so sollte es alle diese Funktionen standardmäßig aktiviert haben, richtig? Was ist dann der Punkt bei der Angabe der Version mit use Schlüsselwort?

Antwort

5

Es verhindert Konflikte mit in Perl geschriebenen Programmen.

Zum Beispiel sagen, ich schrieb ein Programm für Perl 5.6, die eine Unterroutine namens say definiert.

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

Das funktioniert gut (ausgibt), und es funktioniert immer noch in perls, die die say Feature.

Lassen Sie uns jetzt die native say ermöglichen und sehen, was passiert:

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

Jetzt fällt es mit * Die Verwendung von nicht initialisierten Wert über $ _ in sagen an - Leitung 5 *

Sie müssen use feature oder use v5.xx, damit die neuen Funktionen sicher geladen werden können, dh wenn der Autor weiß, dass er sie benutzen will.

+0

bedeutet das unabhängig von der neuesten Version von Perl, die alle auf eine gemeinsame Weise funktionieren, es sei denn, Sie geben an, welche Version verwendet werden soll. und sobald Sie die Version angeben, werden diese Funktionen für Sie aktiviert. Also heißt das, dass meine Version 5.8 und 5.10 die gleiche sein wird, ohne 'use'command feature – chidori

+0

Das ist die Grundidee, ja. Verwenden Sie Feature oder Version jedoch nur zum Aktivieren der NEUEN Funktionen. Fehler oder Fehlfunktionen werden manchmal mit einem Abnutzungszyklus entfernt. Also, was war eine Warnung in 5.8 könnte ein Fehler in 5.10 sein. – stu42j

10

Perl versucht, Abwärtskompatibilität beizubehalten. Es ist durchaus möglich, dass vorhandene Skripts Unterroutinen mit dem Namen say haben. Es gibt eine beträchtliche Diskussion darüber, ob eine zukünftige Version von Perl diese Bemühungen stoppen und seine Interna rationalisieren sollte. Siehe beispielsweise naming and numbering perl.

Verwandte Themen