L'indice del primo elemento in Perl matrice

Nel linguaggio di programmazione Perl, come in molti altri linguaggi di programmazione, il primo elemento dell'array ha indice 0. Ma è stata la possibilità (di cui si consiglia vivamente di non godere) per l'indice del primo elemento è stato 1 (o altro numero).

Ecco un esempio di codice:

▶ Run
#!/usr/bin/perl

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

print $arr[1];

Il programma visualizzerà il testo two. Ci rivolgiamo a un elemento di un array con un indice di 1 e questo il secondo elemento dell'array.

  • l'indice 0 — è il primo elemento della matrice, nel nostro esempio, la stringa di 'one'
  • l'indice 1 — è il secondo elemento di un array, nel nostro esempio, la stringa di 'two'
  • l'indice 2 — è il terzo elemento dell'array, nel nostro esempio, la stringa di 'three'

Per gli studenti di programmazione è strano, ma è la norma. 0 è l'indice del primo elemento di matrice quasi tutti i linguaggi di programmazione.

Variabile $[

I creatori del linguaggio di programmazione Perl voluto fare di lingua per programmatore diritto di decidere come si vuole usare questo linguaggio (principio TIMTOWTDI), pertanto, in lingua è stato un modo per cambiare l'indice del primo elemento. Se qualcuno scomodo utilizzare 0 come indice del primo elemento, si può dire che l'indice del primo elemento sarà 1.

Ecco un esempio di codice:

#!/usr/bin/perl

$[ = 1;

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

print $arr[1];

Impostare il valore di variabile speciale per unità di $[ = 1; — questo diciamo che ora l'indice del primo elemento sarà 1, e non 0. Il programma visualizzerà il testo one.

Ma ben presto divenne chiaro che questa possibilità non semplifica, ma, al contrario, complica il lavoro con il codice. Ecco tu apri il programma e prima di lei di cambiare qualcosa è necessario prima capire come si svolge il lavoro con una matrice.

Pertanto, a partire dalla versione di Perl 5.12 l'uso di una variabile $[ ha portato alla nascita di avviso: Use of assignment to $[ is deprecated at script.pl line 3..

La Versione Di Perl 5.12, 5.14, 5.16, 5.18, 5.20, 5.22. 5.24, 5.26 dato esattamente questo avviso. 5.28 è diventato emettere un avviso Use of assignment to $[ is deprecated, and will be fatal in Perl 5.30 at script.pl line 3., e Perl 5.30 ha smesso di dare la possibilità di cambiare l'indice del primo elemento. Quando si tenta di farlo il programma concludersi con il testo di errore Assigning non-zero to $[ is no longer possible at script.pl line 3..

Quindi freschi versioni del linguaggio Perl il primo elemento di un array ha sempre indice di 0. In Perl a questo versione c'è la possibilità di fare un altro numero indice del primo elemento, ma è meglio questa opportunità non usare mai.

La documentazione ufficiale di

Ecco un frammento di output del comando perldoc perlvar pro variabile $[:

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

Altri articoli