Der index des ersten Elements in Perl-array

In der Programmiersprache Perl, wie in vielen anderen Programmiersprachen das erste Element im array hat index 0. Aber es gab die Möglichkeit (die wird dringend abgeraten nutzen) machen um den index des ersten Elements wurde 1 (oder eine andere Zahl).

Hier ist der Beispielcode:

▶ Run
#!/usr/bin/perl

my @arr = ('one', 'two', 'three');

print $arr[1];

Das Programm zeigt den Text two. Wir blicken auf ein Element eines Arrays mit dem index 1 und dieses zweite Element des Arrays.

  • index 0 — ist das erste Element des Arrays, in unserem Beispiel Zeile 'one'
  • index 1 — ist das zweite Element des Arrays, in unserem Beispiel die Zeile 'two'
  • index 2 — befindet sich das Dritte Element des Arrays, in unserem Beispiel die Zeile 'three'

Für Lernende der Programmierung ist ungewöhnlich, aber es ist Standard. 0 ist der index des ersten ein array-Element in fast allen Programmiersprachen.

Variable $[

Die Schöpfer der Programmiersprache Perl machen wollte die Sprache so zu Programmierer freier einteilen wie er will verwenden diese Sprache (Prinzip TIMTOWTDI), daher in der Sprache war die Art und Weise ändern, die den index des ersten Elements. Wenn jemand unbequem verwenden 0 als index des ersten Elements, das konnte man sagen dass der index des ersten Elements wird 1.

Hier ist der Beispielcode:

#!/usr/bin/perl

$[ = 1;

my @arr = ('one', 'two', 'three');

print $arr[1];

Stellen Sie den Wert der speziellen Variablen in der Einheit $[ = 1; — diese sagen, dass jetzt der index des ersten Elements wird 1, aber nicht 0. Das Programm zeigt den Text one.

Aber sehr schnell war klar, dass diese Möglichkeit nichts vereinfacht, sondern erschwert die Arbeit mit dem Code. Du öffnest das Programm und bevor Sie etwas ändern, müssen Sie zuerst verstehen wie ist die Arbeit mit einem array.

Also ab Perl 5.12 Verwendung der Variable $[ führte zu der Warnung: Use of assignment to $[ is deprecated at script.pl line 3..

Version Perl 5.12, 5.14, 5.16, 5.18, 5.20, 5.22. 5.24, 5.26 gab es diese Warnung. 5.28 wurde eine Warnung Use of assignment to $[ is deprecated, and will be fatal in Perl 5.30 at script.pl line 3., und Perl 5.30 aufgehört, die Möglichkeit, den index des ersten Elements zu ändern. Wenn Sie versuchen, es zu tun das Programm beendet mit dem Text Fehler Assigning non-zero to $[ is no longer possible at script.pl line 3..

Also neuere Versionen von Perl das erste Element eines Arrays hat immer den index 0. In Perl vor diesem Version ist die Möglichkeit, eine andere Zahl index des ersten Elements, aber es ist am besten diese Gelegenheit nie benutzt.

Die offizielle Dokumentation

Hier ist ein Ausschnitt der Ausgabe des Befehls perldoc perlvar über die Variable $[:

    $[      This variable stores the index of the first element in an array,
            and of the first character in a substring. The default is 0, but
            you could theoretically set it to 1 to make Perl behave more
            like awk (or Fortran) when subscripting and when evaluating the
            index() and substr() functions.

            As of release 5 of Perl, assignment to $[ is treated as a
            compiler directive, and cannot influence the behavior of any
            other file. (That's why you can only assign compile-time
            constants to it.) Its use is highly discouraged.

            Prior to Perl v5.10.0, assignment to $[ could be seen from outer
            lexical scopes in the same file, unlike other compile-time
            directives (such as strict). Using local() on it would bind its
            value strictly to a lexical block. Now it is always lexically
            scoped.

            As of Perl v5.16.0, it is implemented by the arybase module.

            As of Perl v5.30.0, or under "use v5.16", or "no feature
            "array_base"", $[ no longer has any effect, and always contains
            0. Assigning 0 to it is permitted, but any other value will
            produce an error.

            Mnemonic: [ begins subscripts.

            Deprecated in Perl v5.12.0.

Andere Artikel