Регулярное выражение []
означает класс символов, который соответствует любому из символов, перечисленных внутри него.
Ваше регулярное выражение эквивалентно:
$b=~ /[program]/
, который возвращает true, так как символ p
находится в $b
.
Чтобы увидеть, происходит ли совпадение или нет, вы печатаете true
, печать true
ничего не показывает. Попробуйте напечатать что-нибудь еще.
Но если вы хотите увидеть, присутствует ли одна строка внутри другой, вы должны отбросить [..]
как:
if ($b=~ /$a/) { print true';}
Если переменная $a
содержала какой-либо метасимвол регулярного выражения, то указанное выше совпадение не сможет исправить это место между \Q
и \E
, так что любые метасимволы в регулярном выражении будут экранированы:
if ($b=~ /\Q$a\E/) { print true';}