How to replace backslash with forward slash in Perl?
Solution 1
= ~
is very different from =~
. The first is assignment and bitwise negation, the second is the binding operator used with regexes.
What you want is this:
$string_to_change =~ s/pattern_to_look_for/string_to_replace_with/g;
Note the use of the global /g
option to make changes throughout your string. In your case, looks like you need:
$dir =~ s/\\/\//g;
If you want a more readable regex, you can exchange the delimiter: s#\\#/#g;
If you want to preserve your original string, you can copy it before doing the replacement. You can also use transliteration: tr#\\#/#
-- in which case you need no global option.
In short:
$dir =~ tr#\\#/#;
Documentation:
Solution 2
You're splitting the =~
operator and missing the global modifier. Just assign $dir
to $replacedString
and then do the substitution.
my $replacedString = $dir;
$replacedString =~ s|\\|/|g;
You can use tr
, the translate operator, instead of the s
operator too to get simpler code.
my $replacedString = $dir;
$replacedString =~ tr|\\|/|;
Solution 3
You might actually be looking for File::Spec->canonpath or Path::Class without realizing it.
user375868
Updated on June 21, 2021Comments
-
user375868 almost 3 years
Similar to this, how do I achieve the same in Perl?
I want to convert:
C:\Dir1\SubDir1\` to `C:/Dir1/SubDir1/
I am trying to follow examples given here, but when I say something like:
my $replacedString= ~s/$dir/"/"; # $dir is C:\Dir1\SubDir1\
I get a compilation error. I've tried escaping the
/
, but I then get other compiler errors.