加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 这个琐碎的功能傻了吗?

发布时间:2020-12-15 23:30:55 所属栏目:大数据 来源:网络整理
导读:我今天遇到了一个让我停下来思考的功能.我想不出有这么好的理由: sub replace_string { my $string = shift; my $regex = shift; my $replace = shift; $string =~ s/$regex/$replace/gi; return $string;} 我能看到的唯一可能的值是,它使您能够控制替换使
我今天遇到了一个让我停下来思考的功能.我想不出有这么好的理由:

sub replace_string {
        my $string  = shift;
        my $regex   = shift;
        my $replace = shift;

        $string =~ s/$regex/$replace/gi;

        return $string;
}

我能看到的唯一可能的值是,它使您能够控制替换使用的默认选项,但我认为没有用.看到这个函数后,我的第一反应就是“这是做什么的?”.一旦我了解它的作用,我就会假设从那时起就做到了.这意味着如果它发生变化,它将破坏我需要它的任何代码.这意味着该功能可能永远不会改变,或者更改它会破坏大量代码.

现在我想追踪原来的程序员,并在他或她身上打败一些感觉.这是一个有效的愿望,还是我错过了这个功能带来的一些价值?

解决方法

该功能的问题包括:

>不透明:replace_string不会告诉您在不进行转义的情况下执行不区分大小写的全局替换.
>非惯用语:$string = ~s {$this} {$that} gi是你可以学习它曾经意味着什么的东西,它不像它的一些奇怪的角落特征. replace_string每个人都必须学习它的细节,并且对于每个编写它的人来说它都会有所不同.
>不灵活:想要非全球性的搜索和替换?抱歉.你可以通过传入一个qr //来输入一些修饰符,但这比它隐藏的s //更高级的知识.
>不安全:用户可能认为该函数采用字符串,而不是正则表达式.如果他们放入未经检查的用户输入,他们就会打开一个潜在的安全漏洞.
>更慢:只是添加最后的侮辱.

优点是:

> Literate:函数名称解释了它的作用,而不必检查正则表达式的细节(但它给出了一个不完整的解释).
>默认值:g和i默认值始终存在(但名称不明显).
>更简单的语法:不必担心分隔符(不是s {} {}很难).
>保护免受全局副作用:正则表达式匹配设置全局变量的沙拉($1,$等等),但它们会自动在本地作用于该函数.如果你将它们用于另一个正则表达式,它们不会干涉.

封装有点过分热心.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读