Что означает s - / - и s - / \ Z-- в perl? - PullRequest
1 голос
/ 02 июля 2011

Я новичок в Perl, и у меня есть вопрос относительно сопоставления с образцом.Я наткнулся на строку в Perl, где было написано

  $variable =~ s-/\Z--;

И по мере продвижения кода была назначена другая переменная

  $variable1 =~ s-/--;

Можете ли вы сказать мне, что эти две строкиделать?Я хочу знать, что означают s-/\Z-- и s-/--.

Ответы [ 4 ]

5 голосов
/ 02 июля 2011

Оператор s/// в Perl является операцией подстановки , которая выполняет поиск и замену строки, используя специальный тип шаблона, называемый регулярным выражением .Вы можете прочитать больше о регулярных выражениях и сопоставлении с образцом Perl на страницах руководства, которые поставляются с Perl:

Если у вас их нет в вашей системе, попробуйте поискать их в Google.

Применение подстановки к переменной выполняется с помощью оператора =~,Таким образом, следующее заменяет все вхождения 'foo' в переменной $var на 'bar'.

$var =~ s/foo/bar/;

Все операторы Perl описаны на странице руководства perlop.

Несмотря на то, что наиболее распространенный символ-разделитель - это косая черта (отсюда s ///), вы также можете использовать любой другой знак пунктуации в качестве разделителя.Поэтому в данном случае автор решил использовать тире (-) в качестве разделителя.

Вот та же строка кода, приведенная выше с использованием тире в качестве разделителя:

$var =~ s-foo-bar-;

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

5 голосов
/ 02 июля 2011
$variable =~ s-/\Z--;

- используется здесь как разделитель. Тем не менее, лучшие практики предполагают, что вы используете / или {} в качестве разделителей.

Это может быть переписано как:

$variable =~ s{/\Z}{};  # remove a / at the end of a string

Рассмотрим:

$variable1 =~ s-/--;

Опять же, это можно переписать как:

$variable1 =~ s{/}{};  # remove the first /
1 голос
/ 02 июля 2011

Функция поиска и замены s/// в perl может использоваться с различными разделителями, что и делается в этом случае.Они заменили / со знаком минус - или тире.

s-/-- удаляет первый / из строки.s-/\Z-- соответствует и удаляет косую черту в конце строки.Я думаю, что это лучше написано: s{/$}{}.

0 голосов
/ 02 июля 2011
  1. $variable1 =~ s-/--; можно записать как

    $variable =~ s{/}{}xms;
    

    или это

    $variable =~ s/ \/ //xms;
    

    Это означает удаление первого / в строке.

  2. Относительно s-/\Z--, оно обычно пишется так:

    $variable =~ s{/ \Z}{}xms;
    

    или это

    $variable =~ s/ \/ \Z //xms;
    

    Это означает удаление /, если ононаходится в конце строки (\Z).

...