如何用Perl中的正斜杠替换反斜杠?

use*_*868 9 string perl escaping

类似,我如何在Perl中实现相同的目标?

我想转换

C:\Dir1\SubDir1\` to `C:/Dir1/SubDir1/
Run Code Online (Sandbox Code Playgroud)

我试图按照这里给出的例子,但是当我说出类似的话

my $replacedString= ~s/$dir/"/"; # $dir is C:\Dir1\SubDir1\
Run Code Online (Sandbox Code Playgroud)

我收到编译错误.我已经尝试转义正斜杠,但我得到其他编译器错误.

TLP*_*TLP 25

= ~与...非常不同=~.第一个是赋值和按位否定,第二个是与正则表达式一起使用的绑定运算符.

你想要的是这个:

$string_to_change =~ s/pattern_to_look_for/string_to_replace_with/g;
Run Code Online (Sandbox Code Playgroud)

请注意使用全局/g选项在整个字符串中进行更改.在您的情况下,看起来像你需要:

$dir =~ s/\\/\//g;
Run Code Online (Sandbox Code Playgroud)

如果你想要一个更易读的正则表达式,你可以交换分隔符: s#\\#/#g;

如果要保留原始字符串,可以在进行替换之前复制它.您也可以使用音译:tr#\\#/#- 在这种情况下,您不需要全局选项.

简而言之:

$dir =~ tr#\\#/#;
Run Code Online (Sandbox Code Playgroud)

文档:


Mik*_*uel 6

您正在拆分=~运算符并缺少全局修饰符.刚分配$dir$replacedString,然后做替换.

my $replacedString = $dir;
$replacedString =~ s|\\|/|g;
Run Code Online (Sandbox Code Playgroud)

您可以使用trtranslate运算符而不是s运算符来获得更简单的代码.

my $replacedString = $dir;
$replacedString =~ tr|\\|/|;
Run Code Online (Sandbox Code Playgroud)


Sin*_*nür 6

您可能实际上在寻找File :: Spec-> canonpathPath :: Class而没有意识到它.