O índice do primeiro elemento em Perl matriz

Na linguagem de programação Perl, como em muitas outras linguagens de programação, o primeiro elemento na matriz tem um índice 0. Mas foi a possibilidade de (o qual é altamente não recomendável para usar) fazer para o índice do primeiro elemento foi 1 (ou outro número).

Aqui está um exemplo de código:

▶ Run
#!/usr/bin/perl

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

print $arr[1];

O programa exibirá o texto two. Voltamos para o elemento de um array com um índice de 1 e esse o segundo elemento da matriz.

  • índice de 0 — está o primeiro elemento da matriz, no nosso exemplo, a linha 'one'
  • índice de 1 — fica o segundo elemento da matriz, no nosso exemplo, a linha 'two'
  • índice de 2 — terceiro elemento da matriz, no nosso exemplo, a linha 'three'

Para os estudantes, a programação é estranho, mas isso é normal. 0 é o índice da primeira elemento da matriz de quase todas as linguagens de programação.

A variável $[

Os criadores da linguagem de programação Perl gostaria de fazer o idioma desta para o programador o próprio decidia como ele quer usar essa linguagem (princípio TIMTOWTDI), portanto, a linguagem era uma maneira de alterar o índice do primeiro elemento. Se alguém inconveniente usar 0 como índice do primeiro elemento, pode-se dizer que o índice do primeiro elemento será 1.

Aqui está um exemplo de código:

#!/usr/bin/perl

$[ = 1;

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

print $arr[1];

Definimos o valor de variável especial na unidade de $[ = 1; — isso dizemos que agora o índice do primeiro elemento será 1, e não 0. O programa exibirá o texto one.

Mas muito rapidamente se tornou claro que esse recurso nada não facilita, mas, ao contrário, a complexidade com o código. Aqui você abrir o programa e antes de ela mudar primeiro você precisa entender como é trabalhar com a matriz.

Portanto, desde a versão Perl 5.12 o uso de uma variável $[ levou ao aparecimento de aviso: Use of assignment to $[ is deprecated at script.pl line 3..

A Versão Do Perl 5.12, 5.14, 5.16, 5.18, 5.20, 5.22. 5.24, 5.26 mascarou seja, é um aviso. 5.28 tornou-se emitir um aviso Use of assignment to $[ is deprecated, and will be fatal in Perl 5.30 at script.pl line 3., e Perl 5.30 parou de dar a oportunidade de mudar o índice do primeiro elemento. Quando você tenta fazer isso o programa falhar com o texto de erro Assigning non-zero to $[ is no longer possible at script.pl line 3..

Então, de novas versões da linguagem Perl o primeiro elemento da matriz sempre tem um índice 0. Em Perl, até este a versão tem a oportunidade de fazer um outro número índice do primeiro elemento, mas o melhor de tudo esta oportunidade nunca utilizar.

A documentação oficial

Aqui está um trecho da saída do comando perldoc perlvar sobre a variável $[:

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

Outros artigos