Funktion index() i Perl

I programmeringssproget Perl har en indbygget funktion index(). Du kan bruge denne funktion, når man arbejder med strenge. Ved hjælp af denne funktion, du kan teste, om et tegn eller substring del af strengen, og også til at kende positionen, hvor tegnet eller delstreng i en streng.

Her er et eksempel:

▶ Run
#!/usr/bin/perl

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

Dette program vil vise antallet 4. Brev 'o' er den femte tegn i strengen 'Hello', I programmeringssproget Perl, det første tegn i strengen er antallet 0. Derfor, for det femte tegn funktion index() returnerer antallet 4

Det faktum, at det første tegn i strengen er antallet 0 helt samme måde som nummererede de elementer i et Perl-array, er det første element i arrayet har rummet 0 (men i tilfælde af et array der er en underfundighed).

Det er, hvad vil tage det samme program, hvis du bruger forskellige værdier for det andet argument:

  • 'H'0
  • 'e'1
  • 'l'2 — i overensstemmelse 'Hello' der er to bogstaver 'l', hvis funktion index() passerer to argumenter, er det altid returnerer nummeret på den første forekomst af et tegn i en streng
  • 'o'4
  • 'z'-1 — brev 'z' i rækken nej, i dette tilfælde, at funktionen returnerer den værdi -1
  • 'h'-1 — funktion index() bogstaver. I strengen er bogstavet 'H"i det øvre register, men der er ingen bogstavet"h' med små bogstaver, så for 'h' funktionen returnerer den særlige værdi -1 — ikke fundet
  • 'Hello'0 — line 'Hello' er inkluderet i overensstemmelse 'Hello' startende med det første symbol, det første symbol er antallet 0, der returnerer en funktion
  • 'el'1 — string 'el' , der indgår i rækken 'Hello' startende med det andet symbol
  • 'asdf'-1 — denne linje er ikke en del af strengen 'Hello'

Argumenter

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

Funktion index() skal indeholde enten to eller tre argumenter. Hvis du ikke angiver et argument, eller kun angive ét, vil det fejl:

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

Hvis du angiver mere end 3 argumenter, vil det fejl:

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

Det første og det andet argument til Perl-fortolker som strenge. Hvis der er en tredje argument, det er opfattet som et nummer.

Funktion index() ser ud til strengen, der er indeholdt i det andet argument, i den række, der indeholder i det første argument, der starter ved den position, der er angivet i det tredje argument (eller begyndelsen af strengen, hvis den tredje argumentet er ikke specificeret).

Return værdi

Resultatet af funktionen index() er altid et heltal.

  • Hvis tallet er positivt eller 0, dette betyder, at strengen fra det andet argument er, substring af det første argument. Den værdi, der betyder, at placeringen af den første linje, som begyndte ved en tilfældighed. Søgningen sker fra begyndelsen af strengen, hvis det tredje argument er ikke specificeret, eller fra den position, der er angivet i det tredje argument.
  • Antallet -1 betyder, at delstreng i en streng mangler

Hvis du ikke bruger returværdien i Perl-script er use warnings;, så skærmen viser en advarsel:

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

For eksempel, en sådan advarsel vil blive givet følgende program:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

index('Hello', 'o');

Et eksempel på brug af index() med tre argumenter

Her er en prøve på programmet. Derefter bruge funktionen index() for at finde den substring 'Ab' i den linje, hvor dette string substring vises to gange. Hvis funktioner index() for ikke at passere den tredje argument, det er det samme som hvis du passerer 0 som det tredje argument.

▶ Run
#!/usr/bin/perl

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

Programmet vil vise antallet 3 betyder, at den delstreng 'Ab' er i den streng der starter på fjerde karakter.

Men det program, der viser resultatet af funktionen index() for forskellige værdier af det tredje argument:

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

Dette program vil udskrive:

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

index() søger efter en delstreng i den streng der starter ved den position, der er angivet i det tredje argument. Substring 'Ab' findes i string to gange. For første gang siden indekset 3, anden gang fra indeks 6.

'00 Ab Ab'
 01234567

Officiel dokumentation

Her er outputtet af kommandoen 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.

Relaterede emner

Andre artikler