Первая замена s/\\'/''/g;
заменяет последнюю \'
на ''
, поэтому
'It doesn\'t work :-\\'
# ^^
становится
'It doesn\'t work :-\''
Я думаю, вы хотите заменить только \'
когда за ним не следует несловесный символ \W
.
Я использую здесь только 2 соответствующие замены для этого случая
my $str = <<'EOD';
insert into tbl values ('it doesn\'t work :-\\', 42, 33, 'and this doesn\'t work as well :-\\', 1024);
EOD
say "before: ",$str;
$str =~ s/\\'(?!\W)/''/g;
$str =~ s/\\\\/\\/g;
say "after: ",$str;
Выход:
before: insert into tbl values ('it doesn\'t work :-\\', 42, 33, 'and this doesn\'t work as well :-\\', 1024);
after: insert into tbl values ('it doesn''t work :-\', 42, 33, 'and this doesn''t work as well :-\', 1024);