【问题标题】:Cleanup Perl code: my $export = $doc; $export =~ s:\.odt:\.pdf:;清理 Perl 代码:我的 $export = $doc; $export =~ s:\.odt:\.pdf:;
【发布时间】:2010-06-02 01:22:30
【问题描述】:

Perl 代码片段:

my $export = $doc;
$export =~ s:\.odt:\.pdf:;

如何写得更干净?不仅仅是900种其他的写法,TMTOWTDI

【问题讨论】:

    标签: regex perl code-cleanup


    【解决方案1】:

     

    my ($export = $doc) =~ s{\.odt}{\.pdf};
    

    更新:该解决方案无法编译(自我注意:在发布到 SO 之前进行测试)。相反,你可以说

    (my $export = $doc) =~ s{\.odt}{\.pdf};
    

    【讨论】:

      【解决方案2】:

      我选择[.] 来匹配文字句点:

      $export ~= s{[.]odt$}{.pdf};
      

      请注意,只有s/// 调用的前半部分是正则表达式。替换为普通字符串,不需要转义句点。

      不过,您可能希望使用 Path::Class 将文件表示为对象而不是字符串。

      【讨论】:

      • 我认为您的意思是 \z,而不是 $。 $ 只是很少需要。
      • +1 分隔符 {} 对我来说比 : 更容易阅读,并且在替换字符串中删除了转义序列。
      • \z 是“I am a PBP fanboi”转义序列。
      【解决方案3】:

      我的 %ext = ('odt' => 'pdf', 等等...); (我的 $export = $doc) =~ s{.([^.]+)$}{'.'.($ext{$1}||$1})}例如;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-07-28
        • 2017-10-19
        • 1970-01-01
        • 1970-01-01
        • 2016-02-10
        • 1970-01-01
        相关资源
        最近更新 更多