Funkcja index() w Perl

W języku programowania Perl jest wbudowana funkcja index(). Funkcja ta jest używana podczas pracy z wierszami. Za pomocą tej funkcji można dowiedzieć się czy jest symbol lub podciąg częścią wiersza, a także dowiedzieć się stanowisko, na którym znajduje się symbol lub podciąg w wierszu.

Oto przykład:

▶ Run
#!/usr/bin/perl

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

Ten program wypisze na ekran liczba 4. Litera 'o' — jest to piąty symbol w wierszu 'Hello', W języku programowania Perl pierwszy znak w ciągu ma numer 0. Dlatego do piątego znaku funkcja index() zwraca liczbę 4

To, że pierwszy znak w ciągu ma numer 0 zupełnie podobnie jak są numerowane elementy w Perl tablicy — pierwszy element tablicy ma numer 0 (ale w przypadku tablicy jest haczyk).

Oto co wyświetla ten sam program jeżeli używać różnych wartości drugiego argumentu:

  • 'H'0
  • 'e'1
  • 'l'2 — w wierszu 'Hello' są dwie litery 'l', jeśli funkcje index() przekazywane są dwa argumenty, to ona zawsze zwraca liczbę do pierwszego wystąpienia znaku w wierszu
  • 'o'4
  • 'z'-1 — litery 'z' w wierszu nie ma, w takim przypadku funkcja zwraca wartość specjalna liczba -1
  • 'h'-1 — funkcja index() регистрозависима. W wierszu jest litera 'H' w górnym rejestrze, ale nie ma litery 'h' małymi literami, więc dla 'h' funkcja zwraca wartość specjalna -1 — nie znaleziono
  • 'Hello'0 — wiersz 'Hello' wchodzi w ciąg 'Hello' począwszy od pierwszego znaku, pierwszy znak ma numer 0, co funkcja zwraca
  • 'el'1 — wiersz 'el' wchodzi w ciąg 'Hello' począwszy od drugiego znaku
  • 'asdf'-1 — wiersz ten nie jest częścią wiersza 'Hello'

Argumenty

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

Funkcje index() należy podać albo dwa, albo trzy argumenty. Jeśli nie podać ani jednego argumentu lub podać tylko jeden, to będzie błąd:

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

Jeśli podasz więcej niż 3 argumenty, to będzie błąd:

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

Pierwszy i drugi argument Perl postrzega jako polecenia. Jeśli trzeci argument, to jest on postrzegany jak liczba.

Funkcja index() szuka wiersz, który znajduje się w drugim argumencie, w wierszu, który zawiera w pierwszym argumencie od pozycji podanej w drugim argumencie (lub od początku wiersza, jeśli trzeci nie podano).

Wartość zwracana

Wynik działania funkcji index() — to jest zawsze liczbą całkowitą.

  • Jeśli liczba jest dodatnia lub 0, oznacza to, że ciąg drugi argument jest częścią wiersze z pierwszego argumentu. Wartość oznacza pozycję w pierwszej linii, z której zaczęło się przypadkiem. Wyszukiwanie odbywa się na początku linii, jeśli trzeci argument nie zostanie podany, albo z pozycji podanej w drugim argumencie.
  • Liczba -1 oznacza, że podciąg w wierszu nie ma

Jeśli nie korzystać z zwracana wartość i w skrypcie Perl jest use warnings;, na ekranie pojawi się ostrzeżenie:

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

Na przykład, to jest ostrzeżenie wyświetli następujący program:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

index('Hello', 'o');

Przykład użycia index() z trzema argumentami

Oto przykład programu. Tu jest używana funkcja index() , aby znaleźć podciąg 'Ab' w wierszu, w którym ta podciąg spotyka się dwa razy. Jeśli funkcje index() nie przekazać trzeci argument, to to samo jak jeśli wyślij liczba 0 jako trzeci argument.

▶ Run
#!/usr/bin/perl

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

Program wypisze na ekran liczba 3 — to oznacza, że podciąg 'Ab' znajduje się w wierszu począwszy od czwartego znaku.

A oto program który wyświetla wynik działania funkcji index() dla różnych wartości trzeciego argumentu:

▶ 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) );
}

Ten program wyświetli:

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

index() szuka podciąg znaków w wierszu począwszy od pozycji określonej w trzecim argumencie. Podciąg 'Ab' występuje w wierszu dwa razy. Po raz pierwszy od indeksu 3, drugi raz od indeksu 6.

'00 Ab Ab'
 01234567

Oficjalna dokumentacja

Oto wynik polecenia 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.

Tematy pokrewne

Inne artykuły