El índice del primer elemento en la matriz de Perl

En el lenguaje de programación Perl, como en muchos otros lenguajes de programación, el primer elemento de la matriz tiene un índice de 0. Pero era una oportunidad que no se recomienda utilizar) para hacer el índice del primer elemento fue el 1 (u otro número).

He aquí un ejemplo de código:

▶ Run
#!/usr/bin/perl

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

print $arr[1];

El programa mostrará en pantalla el texto two. Nos dirigimos a un elemento de la matriz con el índice de 1 y este segundo elemento de la matriz.

  • el índice de 0 — se encuentra el primer elemento de la matriz, en nuestro ejemplo, la cadena de 'one'
  • el índice de 1 — se encuentra en el segundo elemento de la matriz, en nuestro ejemplo, la cadena de 'two'
  • el índice de 2 — se encuentra el tercer elemento de la matriz, en nuestro ejemplo, la cadena de 'three'

Para los estudiantes de la programación es extraño, pero es la norma. 0 es el índice de la primera el elemento de la matriz en casi todos los lenguajes de programación.

La variable $[

Los creadores del lenguaje de programación Perl querían hacer el idioma de esta para el programador él decidía que él quiere utilizar este idioma (el principio de la TIMTOWTDI), por lo tanto, en la lengua fue una manera de cambiar el índice del primer elemento. Si alguien incómodo utilizar 0 como el índice del primer elemento, es decir que el índice del primer elemento, se 1.

He aquí un ejemplo de código:

#!/usr/bin/perl

$[ = 1;

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

print $arr[1];

Establecemos el valor de la variable especial en la unidad de $[ = 1; — estas diciendo que ahora el índice del primer elemento se 1, y no 0. El programa mostrará en pantalla el texto one.

Pero muy rápidamente se hizo evidente que esta posibilidad nada no facilita, sino por el contrario, complica el trabajo de con el código. He aquí abres el programa y antes en ella de cambiar algo primero tiene que entender como se realiza el trabajo con la matriz.

Por lo tanto, a partir de la versión de Perl 5.12 uso de la variable $[ condujo a la aparición de alerta: Use of assignment to $[ is deprecated at script.pl line 3..

La Versión De Perl 5.12, 5.14, 5.16, 5.18, 5.20, 5.22. 5.24, 5.26 daban precisamente esta advertencia. 5.28 empezaba a emitir una advertencia Use of assignment to $[ is deprecated, and will be fatal in Perl 5.30 at script.pl line 3., y Perl 5.30 ha dejado de dar la posibilidad de cambiar el índice del primer elemento. Al intentar hacerlo el programa de terminar con el texto de los errores Assigning non-zero to $[ is no longer possible at script.pl line 3..

Así que en las versiones más recientes de Perl primer elemento de la matriz siempre tiene un índice de 0. En Perl antes de esta la versión es la posibilidad de hacer otro número de índice del primer elemento, pero lo mejor de esta oportunidad no usarla nunca.

La documentación oficial

He aquí un fragmento de la salida del comando perldoc perlvar sobre la 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.

Otros articulos