Funkcja chop() w Perl

W języku programowania Perl jest wbudowana funkcja chop(). Funkcja ta jest używana podczas pracy z wierszami. W najprostszym przypadku funkcja chop() usuwa ostatni znak w zmiennej która przekazana argumentem w tej funkcji.

Oto przykład:

▶ Run
#!/usr/bin/perl

my $string = 'ASDF';

chop($string);

print "'$string'";

Ten program wyświetla na ekranie tekst 'ASD'.

Argumenty

W przypadku, gdy funkcje chop nie zostały przekazane żadne argumenty, to funkcja działa z дефолтной zmiennej $_:

▶ Run
#!/usr/bin/perl

$_ = 123;

chop();

print "'$_'";

W przypadku, gdy w zmiennej $_ jest undef i jest używany use warnings;, to będzie ostrzeżenie:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

chop();
Use of uninitialized value $_ in scalar chop at script.pl line 6.

W funkcji chop() można wysyłać скаляры, tablice, хеши. W przypadku mieszania funkcja będzie działać tylko z wartościami kluczy, same klucze nie zmienią.

Argumentem funkcji chop() zawsze musi być zmienna. W przypadku, gdy spróbuj wysłać z tej funkcji, wiersz, to będzie błąd i wykonanie programu zostanie zatrzymane:

▶ Run
#!/usr/bin/perl

chop('ASDF'); # Error!
Can't modify constant item in chop at script.pl line 3, near "'ASDF')"
Execution of script.pl aborted due to compilation errors.

Wartość zwracana

Funkcja chop() zawsze zwraca ciąg znaków. To może być pusta wiersz '', albo ciąg znaków składający się z dokładnie jednego znaku.

Oto przykład sytuacji, gdy chop() zwraca pusty ciąg znaków:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my $var = '';

warn Dumper chop($var);
warn Dumper $var;

A oto przykład częstej sytuacji, gdy chop() zwraca ciąg znaków dokładnie z jednego symbolu. Funkcja zwraca jeden znak, który został odcięty od wiersza:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my $var = 'asdf';

warn Dumper chop($var);
warn Dumper $var;

Ten program wypisze na ekran:

$VAR1 = 'f';
$VAR1 = 'asd';

Oto jeszcze jeden przykład sytuacji, gdy chop() zwraca jeden znak.

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = qw(abc def ghi);

warn Dumper chop(@arr);
warn Dumper \@arr;

Wyjście z programu:

$VAR1 = 'i';
$VAR1 = [
          'ab',
          'de',
          'gh'
        ];

Funkcja chop() odcięła ostatni symbol wszystkich elementów w tablicy, ale zwróciła tylko jeden znak, ten który został odcięty ostatni.

Oficjalna dokumentacja

Oto wynik polecenia perldoc -f chop:

       chop VARIABLE
       chop( LIST )
       chop    Chops off the last character of a string and returns the
               character chopped.  It is much more efficient than "s/.$//s"
               because it neither scans nor copies the string.  If VARIABLE is
               omitted, chops $_.  If VARIABLE is a hash, it chops the hash's
               values, but not its keys.

               You can actually chop anything that's an lvalue, including an
               assignment.

               If you chop a list, each element is chopped.  Only the value of
               the last "chop" is returned.

               Note that "chop" returns the last character.  To return all but
               the last character, use "substr($string, 0, -1)".

               See also "chomp".

Tematy pokrewne

Inne artykuły