Косые черты и хэши в Perl и метасимволы - PullRequest
0 голосов
/ 15 февраля 2011

Я спрашивал ранее об экранировании специальных символов и разбирался в правилах вокруг // и ##, но приведенный ниже пример не работает, и, насколько я понимаю, мне нужно убежать, escape-символ. Он ищется как совпадение для обычного значения \ между именами. Я в тупике. Пожалуйста помоги. Я в замешательстве, несмотря на то, что, вероятно, выгляжу легко для масс. Я знаю, что мог написать это как $ userInfo = ~ # \ #;

#!C:\strawberry\perl\bin\perl.exe

#strict
#diagnostics


$userInfo = "firstname\middlename\lastname.";


if($userInfo =~ m/\\/){ 
print("Found it");
}

else{
print("No match found");
}

Ответы [ 3 ]

5 голосов
/ 15 февраля 2011

Проблема в том, что вы должны избегать обратной косой черты в своем задании $userInfo:

$userInfo = "firstname\\middlename\\lastname.";
3 голосов
/ 15 февраля 2011

Вы пытаетесь найти строку, которая содержит буквальный символ bakslash \. Двойные кавычки интерполируются. Вместо этого используйте одинарные кавычки.

use warnings;
use strict;

my $userInfo = 'firstname\middlename\lastname.';

if ($userInfo =~ m/\\/){
    print("Found it");
}
else{
    print("No match found");
}

Прагма предупреждений сгенерировала бы предупреждающее сообщение.

См. Также: Операторы цитирования и подобные им

1 голос
/ 15 февраля 2011

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

Однако, если вам действительно нужно экранировать специальные символы, вы можете написатьэто так:

  #!C:\strawberry\perl\bin\perl.exe

  #strict
  #diagnostics

  $userInfo = "firstname\\middlename\\lastname.";      #please note escaped backslahes
  if($userInfo =~ m/\\/)
  { 
    print("Found it");
  }
  else
  {
    print("No match found");
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...