Оператор ++ в Perl

Оператор двойной плюс используется в Perl для того чтобы увеличить значение переменной на один.

Пример:

▶ Run
#!/usr/bin/perl

my $i = 100;

$i++;

print $i;

Программа выведет на экран число 101.

Формы записи

Существует две формы записи: можно указать оператор после переменной (постфиксная форма записи) или перед переменной (префиксная форма записи):

$i++;
++$i;

В том случае если команда находится одна на строчке, то нет разницы между префиксной и постфиксной формой записи. Разница есть только если оператор ++ используется в составе какой-то команды. Если ++ находится перед переменной, то значение переменной увеличится перед выполнением оставшейся команды. Если ++ находится после переменной, то значение переменной увеличится после выполнения оставшейся команды.

Вот пример.

Вот эта программа выведет на экран числа 100 и 101:

▶ Run
#!/usr/bin/perl

use feature qw(say);

my $i = 100;

say $i++;
say $i;

А вот эта программа выведет на экран число 101 два раза:

▶ Run
#!/usr/bin/perl

use feature qw(say);

my $i = 100;

say ++$i;
say $i;

++ для строк

У оператора ++ есть специальная магия. Он действует особым образом если его применить к переменной в которой находится строка.

Причем интересно что у оператора -- такой магии нет.

Пример. Вот эта программа выведет на экран строку a2:

▶ Run
#!/usr/bin/perl

my $str = 'a1';

$str++;

print $str;

Вот несколько примеров что сделает оператор ++ со строкой в переменной:

'a' -> 'b'
'b' -> 'c'
'z' -> 'aa'
'aa' -> 'ab'
'az' -> 'ba'
'zz' -> 'aaa'

'A1' -> 'A2'
'A9' -> 'B0'

'undef' -> 'undeg'

'A+100' -> '1'

При использовании оператора ++ со строками есть много тонкостей. Лучше всего вообще не использовать применительно ко строкам. Если вы его используете для операции со строками, то вы должны очень хорошо понимать как он работает или будут ошибки. Но возможно что человек который после вас будет работать с этим кодом не так хорошо понимает как работает ++ для строк и при изменении кода добавит туда багов.

Неправильное использование

Оператор ++ можно использовать только для переменных. Если попытаться использовать ++ не для переменной, а для простого числа, то это выдаст ошибку. Вот пример кода с ошибкой:

▶ Run
#!/usr/bin/perl

my $i = 100++; # error!

При выполнении этой программы будет ошибка:

Can't modify constant item in postincrement (++) at script.pl line 3, near "100++"
Execution of script.pl aborted due to compilation errors.

Точно так же его нельзя применять к массивам:

▶ Run
#!/usr/bin/perl

my @arr = (1, 2, 3);

@arr++; # error
Can't modify private array in postincrement (++) at script.pl line 5, near "@arr++"
Execution of script.pl aborted due to compilation errors.

И к хешам:

▶ Run
#!/usr/bin/perl

my %h = (
    a => 1,
);

%h++; # error
Can't modify private hash in postincrement (++) at script.pl line 7, near "%h++"
Execution of script.pl aborted due to compilation errors.

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

Комментарии