与this类似,我如何在Perl中实现相同的目标?
我想转换
C:\Dir1\SubDir1\` to `C:/Dir1/SubDir1/
我正在尝试按照here给出的示例,但是当我说出像
这样的内容时my $replacedString= ~s/$dir/"/"; # $dir is C:\Dir1\SubDir1\
我收到编译错误。我已经尝试转义正斜杠,但我得到其他编译器错误。
答案 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->canonpath或Path::Class。
答案 3 :(得分:0)
use warnings;
use strict;
my $str = 'c:/windows/';
$str =~ tr{/}{\\};
print $str;
输出:
c:\ windows \