Как заменить слеш с косой в Perl?

аналогично этой, как я могу достичь того же в Perl?

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

C:Dir1SubDir1` to `C:/Dir1/SubDir1/

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

my $replacedString= ~s/$dir/"/"; # $dir is C:Dir1SubDir1

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

4 ответов


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

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

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

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

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

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

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

короче:

$dir =~ tr#\#/#;

документы:


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

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

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

my $replacedString = $dir;
$replacedString =~ tr|\|/|;

вы, возможно, искали File:: Spec - >canonpath или Путь::Класс не осознавая этого.


use warnings;    
use strict;    
my $str = 'c:/windows/';    
$str =~ tr{/}{\};    
print $str;

выход:

\c:\windows