= ~
очень отличается от =~
.Первый - это присвоение и побитовое отрицание, второй - оператор связывания, используемый с регулярными выражениями.
То, что вы хотите, это:
$string_to_change =~ s/pattern_to_look_for/string_to_replace_with/g;
Обратите внимание на использование глобальной опции /g
длявносить изменения по всей вашей строке.В вашем случае выглядит так:
$dir =~ s/\\/\//g;
Если вы хотите более удобочитаемое регулярное выражение, вы можете заменить разделитель: s#\\#/#g;
Если вы хотите сохранить исходную строку,Вы можете скопировать его перед выполнением замены.Вы также можете использовать транслитерацию: tr#\\#/#
- в этом случае вам не нужна глобальная опция.
Вкратце:
$dir =~ tr#\\#/#;
Документация: