【问题标题】:How to replace backslash with forward slash in Perl?如何在 Perl 中用正斜杠替换反斜杠?
【发布时间】:2011-12-22 07:24:03
【问题描述】:

类似于this,如何在 Perl 中实现相同的功能?

我要转换:

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

我正在尝试遵循here 给出的示例,但是当我说类似的话时:

my $replacedString= ~s/$dir/"/"; # $dir is C:\Dir1\SubDir1\

我得到一个编译错误。我尝试转义/,但随后出现其他编译器错误。

【问题讨论】:

    标签: string perl escaping


    【解决方案1】:

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

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

    您也可以使用转换运算符tr 代替s 运算符以获得更简单的代码。

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

    【讨论】:

      【解决方案2】:

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

      你想要的是这个:

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

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

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

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

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

      简而言之:

      $dir =~ tr#\\#/#;
      

      文档:

      【讨论】:

        【解决方案3】:

        您实际上可能正在寻找File::Spec->canonpath 或Path::Class 而没有意识到。

        【讨论】:

          【解决方案4】:
          use warnings;    
          use strict;    
          my $str = 'c:/windows/';    
          $str =~ tr{/}{\\};    
          print $str;
          

          输出:

          c:\windows\

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-10
            • 1970-01-01
            • 2022-11-25
            • 2013-11-04
            • 1970-01-01
            • 2014-09-09
            相关资源
            最近更新 更多