Как заменить обратную косую черту передней косой чертой в Perl? - PullRequest
8 голосов
/ 04 ноября 2011

Как и это , как мне добиться того же в Perl?

Я хочу преобразовать

C:\Dir1\SubDir1\` to `C:/Dir1/SubDir1/

Я пытаюсь следовать примерам, данным здесь , но когда я говорю что-то вроде

my $replacedString= ~s/$dir/"/"; # $dir is C:\Dir1\SubDir1\

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

Ответы [ 4 ]

23 голосов
/ 04 ноября 2011

= ~ очень отличается от =~.Первый - это присвоение и побитовое отрицание, второй - оператор связывания, используемый с регулярными выражениями.

То, что вы хотите, это:

$string_to_change =~ s/pattern_to_look_for/string_to_replace_with/g;

Обратите внимание на использование глобальной опции /g длявносить изменения по всей вашей строке.В вашем случае выглядит так:

$dir =~ s/\\/\//g;

Если вы хотите более удобочитаемое регулярное выражение, вы можете заменить разделитель: s#\\#/#g;

Если вы хотите сохранить исходную строку,Вы можете скопировать его перед выполнением замены.Вы также можете использовать транслитерацию: tr#\\#/# - в этом случае вам не нужна глобальная опция.

Вкратце:

$dir =~ tr#\\#/#;

Документация:

6 голосов
/ 05 ноября 2011

Возможно, вы действительно ищете File :: Spec-> canonpath или Path :: Class , не осознавая этого.

6 голосов
/ 04 ноября 2011

Вы разделяете оператор =~ и пропустите глобальный модификатор.Просто назначьте $dir на $replacedString и затем выполните подстановку.

my $replacedString = $dir;
$replacedString =~ s|\\|/|g;

Вы можете использовать tr, оператор перевода, вместо оператора s тожеполучить более простой код.

my $replacedString = $dir;
$replacedString =~ tr|\\|/|;
0 голосов
/ 22 июня 2018
use warnings;    
use strict;    
my $str = 'c:/windows/';    
$str =~ tr{/}{\\};    
print $str;

Вывод:

c: \ windows \

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...