Функция chop() в Perl

В языке программирования Perl есть встроенная функция chop(). Эта функция используется при работе со строками. В самом простом случае функция chop() удаляет последний символ в переменный которая передана аргументом в эту функцию.

Вот пример:

▶ Run
#!/usr/bin/perl

my $string = 'ASDF';

chop($string);

print "'$string'";

Эта программа выведет на экран текст 'ASD'.

Аргументы

В том случае если функции chop не переданы никакие аргументы, то функция работает с дефолтной переменной $_:

▶ Run
#!/usr/bin/perl

$_ = 123;

chop();

print "'$_'";

В том случае если в переменной $_ находится undef и используется use warnings;, то будет предупреждение:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

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

В функцию chop() можно передавать скаляры, массивы, хеши. В случае хеша функция будет работать только со значениями ключей, сами ключи не изменятся.

Аргументом функции chop() всегда должна быть переменная. В том случае если попробовать передать этой функции строку, то будет ошибка и выполнение программы будет остановлено:

▶ 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.

Возвращаемое значение

Функция chop() всегда возвращает строку. Это может быть либо пустая строка '', либо строка состоящая ровно из одного символа.

Вот пример ситуации когда chop() возвращает пустую строку:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my $var = '';

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

А вот пример более частой ситуации, когда chop() возвращает строку ровно из одного символа. Функция возвращает тот символ, который был отрезан от строки:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my $var = 'asdf';

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

Эта программа выведет на экран:

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

Вот еще один пример ситуации когда chop() возвращает один символ.

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = qw(abc def ghi);

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

Вывод программы:

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

Функция chop() отрезала последний символ у всех элементов в массиве, но возвратила только один символ, тот который был отрезан последним.

Официальная документация

Вот вывод команды 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".

Связанные темы

Другие статьи