Как заменить слеш с косой в 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 или Путь::Класс не осознавая этого.