Проблема в том, что вы используете одинарные кавычки для определения $re
. Это означает, что когда вы используете его в шаблоне поиска, он ищет две косые черты.
Одинарные кавычки говорят Perl не интерполировать строки, а использовать вместо них необработанные символы. Каждый слэш воспринимается буквально и как побег.
Сравнить:
$re0 = 'a\\cc';
$re1 = "a\\cc";
Когда вы распечатаете их, вы увидите:
print $re0."\n".$re1."\n";
a\\cc
a\cc
С другой стороны, когда вы используете строку непосредственно в регулярном выражении, она интерполируется, поэтому вам нужен один слеш, чтобы действовать как побег, а другой - как выход, который вы избегаете.