Точка с запятой в конце оператора - PullRequest
5 голосов
/ 13 декабря 2011

; используется в качестве разделителя операторов, поэтому размещение нескольких ; в конце оператора - это нормально, так как оно просто добавляет пустые операторы.

Я наткнулся на этот код, который имеет несколько ; в конце, но удаление их вызывает ошибки:

$line =~s;[.,]$;;;

должно быть таким же, как

$line =~s;[.,;]$;

но это не так. Что происходит?

Ответы [ 3 ]

13 голосов
/ 13 декабря 2011

в предоставленном вами фрагменте ; используется в качестве разделителя для регулярного выражения search-n-replace.

$line =~s;[.,]$;;;

эквивалентно

$line =~ s/[.,]$//;
7 голосов
/ 13 декабря 2011

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

$line =~s/[.,]$//;

Поскольку в вашем выражении должны быть разделители операторов и разделители регулярных выражений, вы не можете удалить ни одного из конечных ;

3 голосов
/ 13 декабря 2011

Точка с запятой не всегда является разделителем операторов;это также может быть строка в кавычках или разделитель регулярных выражений.Или даже имя переменной, как в этом классическом JAPH Абигейл, под названием «Вещи не то, чем они кажутся».

$;                              # A lone dollar?
=$";                            # Pod? 
$;                              # The return of the lone dollar?
{Just=>another=>Perl=>Hacker=>} # Bare block?
=$/;                            # More pod?
print%;                         # No right operand for %?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...