Эта линия Perl бессмысленна?с / ^ (\ d +) \ Ъ / $ 1 / SG - PullRequest
8 голосов
/ 08 февраля 2012

Эта линия Perl действительно что-то делает?

$variable =~ s/^(\d+)\b/$1/sg;

Единственное, о чем я могу думать, это то, что $1 или $& могут быть повторно использованы, но за ними сразу же следует.

$variable =~ s/\D//sg;

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

Ответы [ 2 ]

12 голосов
/ 08 февраля 2012
$variable =~ s/^(\d+)\b/$1/sg;
  • Привязка ^ в начале делает бесполезным модификатор /g.
  • Отсутствие подстановочного знака . в строке делает бесполезным модификатор /s, поскольку он служит для того, чтобы . также соответствовал символу новой строки.
  • Поскольку \b и ^ являются утверждениями нулевой ширины и единственными вещами вне группы захвата, эта замена не изменит переменную ввсе.

Единственное, что делает это регулярное выражение, захватывает цифры в $1, если они найдены.

Последующее регулярное выражение

$variable =~ s/\D//sg;

Будетудалите все не-цифры, сделав переменную всего одним длинным числом.Если кто-то хочет отделить первую часть (соответствующую первому регулярному выражению), единственный способ сделать это - получить доступ к $1 из первого регулярного выражения.

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

$variable =~ /^(\d+)\b/;

И если предполагается использовать захват:

my ($num) = $variable =~ /^(\d+)\b/;
6 голосов
/ 08 февраля 2012

Используется ли «режим испорченности»? (Скрипт вызывается с опцией -T.)

Возможно, он используется для дезинфекции (т. Е. Неиспользования) пользовательского ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...