A função index() em Perl

Na linguagem de programação Perl possui a função de index(). Esta função é utilizada quando se trabalha com cadeias de caracteres. Com esta função, você pode saber se um símbolo ou uma subcadeia de caracteres de fazer parte da cadeia, e também saber a posição em que se encontra o símbolo ou uma subcadeia de caracteres em uma linha.

Aqui está um exemplo:

▶ Run
#!/usr/bin/perl

print( index('Hello', 'o') );

Este programa irá imprimir na tela o número de 4. A letra 'o' é пятый símbolo na barra de 'Hello', Na linguagem de programação Perl primeiro caractere na seqüência de caracteres tem o número de 0. Portanto, para o quinto símbolo a função index() retorna o número de 4

O que o primeiro caractere na seqüência de caracteres tem o número de 0 totalmente de forma semelhante como são numeradas itens no Perl matriz — o primeiro elemento na matriz tem o número de 0 (mas no caso da matriz há uma sutileza).

Isso é o que exibe o mesmo programa se usar valores diferentes para o segundo argumento:

  • 'H'0
  • 'e'1
  • 'l'2 — em linha 'Hello' tem duas letras 'l', se a função de index() é passado dois argumentos, então ela sempre retorna um número para a primeira ocorrência de um caractere em uma seqüência de
  • 'o'4
  • 'z'-1 — letras 'z' em linha não há, neste caso, a função retorna um valor especial o número de -1
  • 'h'-1 — função de index() регистрозависима. Na seqüência há a letra 'H' em letras maiúsculas, mas não tem a letra 'h', em letras minúsculas, portanto, para 'h' a função retorna um valor especial -1 — não encontrado
  • 'Hello'0 — linha 'Hello' incluídas na linha de 'Hello' desde o primeiro carácter, o primeiro caractere tem o número de 0, que retorna a função de
  • 'el'1 — linha 'el' incluídas na linha de 'Hello' a partir do segundo símbolo
  • 'asdf'-1 — esta linha não é parte da cadeia de 'Hello'

Argumentos

my $index1 = index($str, $substr);
my $index2 = index($str, $substr, $position);

A função index() precisa, necessariamente, especificar um ou dois, ou três argumentos. Se você não especificar nenhum argumento, ou indicar apenas um, então o erro será:

Not enough arguments for index at script.pl line 3, near "index() "
Execution of script.pl aborted due to compilation errors.

Se você especificar mais de 3 argumento, então o erro será:

Too many arguments for index at script.pl line 3, near "'a') "
Execution of script.pl aborted due to compilation errors.

O primeiro e o segundo argumento Perl usa-lo como um comando. Se há um terceiro argumento, ele é percebido como um número.

A função index() procura uma seqüência de caracteres que contém um segundo argumento em uma linha que contém no primeiro argumento a partir da posição especificada no terceiro argumento (ou com o início de uma linha, se o terceiro o argumento não for especificado).

O valor de retorno

O resultado do trabalho da função index() — é sempre um número inteiro.

  • Se o número é positivo ou 0, o que significa que a seqüência de caracteres a partir do segundo argumento é parte de uma linha a partir do primeiro argumento. O valor significa que a posição na primeira linha, com o qual começou por acaso. A pesquisa ocorre com o início de uma linha, se o terceiro argumento não for especificado, ou com a posição especificada no terceiro argumento.
  • O número de -1 significa que a subcadeia de caracteres em uma linha de falta

Se você não usar o valor de retorno e o Perl script tem use warnings;, em seguida será exibido um aviso:

Useless use of index in void context at script.pl line 6.

Por exemplo, é um aviso emitirá o seguinte programa:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

index('Hello', 'o');

Um exemplo de utilização de index() com três argumentos

Aqui está um exemplo de um programa. Então usa a função de index() para encontrar a substring 'Ab' na linha em que este substr reúne-se duas vezes. Se a função index() não passar o terceiro argumento, então, é a mesma coisa como se enviar um número de 0 como o terceiro argumento.

▶ Run
#!/usr/bin/perl

print( index('00 Ab Ab', 'Ab', 0) );

O programa exibirá o número de 3 — isso significa que a substring 'Ab' está na linha a partir do quarto caractere.

E esse é o programa que apresenta o resultado de trabalho de funções index() para diferentes valores de terceiro argumento:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use feature qw(say);

foreach my $position (0..9) {
    say( $position, ' ', index('00 Ab Ab', 'Ab', $position) );
}

Este programa irá imprimir:

0 3
1 3
2 3
3 3
4 6
5 6
6 6
7 -1
8 -1
9 -1

index() à procura de uma subcadeia de caracteres em uma linha a partir da posição especificada no terceiro argumento. Substr 'Ab' é encontrado na linha duas vezes. A primeira vez que a partir do índice de 3, a segunda vez que a partir do índice de 6.

'00 Ab Ab'
 01234567

A documentação oficial

Aqui está a saída do comando perldoc -f index:

       index STR,SUBSTR,POSITION
       index STR,SUBSTR
               The index function searches for one string within another, but
               without the wildcard-like behavior of a full regular-expression
               pattern match.  It returns the position of the first occurrence
               of SUBSTR in STR at or after POSITION.  If POSITION is omitted,
               starts searching from the beginning of the string.  POSITION
               before the beginning of the string or after its end is treated
               as if it were the beginning or the end, respectively.  POSITION
               and the return value are based at zero.  If the substring is
               not found, "index" returns -1.

Temas relacionados

Outros artigos