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

时间:2011-11-04 19:12:28

标签: string perl escaping

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

我想转换

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

我正在尝试按照here给出的示例,但是当我说出像

这样的内容时
my $replacedString= ~s/$dir/"/"; # $dir is C:\Dir1\SubDir1\

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

4 个答案:

答案 0 :(得分:23)

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

你想要的是这个:

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

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

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

如果您想要更具可读性的正则表达式,可以交换分隔符:s#\\#/#g;

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

简而言之:

tr#\\#/#

文档:

答案 1 :(得分:6)

您正在拆分=~运算符并缺少全局修饰符。只需将$dir分配给$replacedString,然后进行替换。

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

您可以使用tr(翻译运算符)代替s运算符来获得更简单的代码。

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

答案 2 :(得分:6)

您可能实际上在没有意识到的情况下寻找File::Spec->canonpathPath::Class

答案 3 :(得分:0)

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

输出:

  

c:\ windows \