代码之家  ›  专栏  ›  技术社区  ›  RCIX

为什么Perl是大多数字符串操作任务的最佳选择?

  •  23
  • RCIX  · 技术社区  · 15 年前

    我听说Perl是字符串操作(和行噪声;)的入门语言。有人能举出一些例子和与其他语言的比较来说明原因吗?

    11 回复  |  直到 10 年前
        1
  •  17
  •   Brian Rasmussen    15 年前

    这是非常主观的,所以我不认为Perl是最好的选择,但对于字符串操作来说,它确实是一个有效的选择。其他的选择是tcl、python、awk等。

    我喜欢Perl的功能,因为它对快速regexs有极好的支持(比注释中指出的posix更好),而且隐式变量使得用很少的代码进行基本的字符串处理变得容易。

    如果您有一个*nix的背景,那么您已经知道的许多内容也将应用于Perl,这使得许多人很容易接受它。

        2
  •  14
  •   Brad Gilbert    15 年前

    Perl->实用的提取和报告语言

    Perl的优势(当涉及到字符串处理时)在于它非常强大 Regular expression engine .

    正因为如此,在生物信息学领域有许多人使用Perl作为他们的 主要工具,因此大量的帖子约 BioPerl on PerlMonks . 在生物信息学中,他们经常使用弦,他们称之为“序列”(我对此不太了解)。

    Perlmonks.org 是Perl社区的核心,查看大量点击量 当你搜索 site:perlmonks.org regex 20,000 hits

    不能忽略上的模块总数 CPAN :

    这很清楚地证明了Perl在字符串处理方面是一种非常强大的语言。

    所以,如果您想做一些字符串处理,并且您正在使用Perl,那么您已经将它覆盖了:)

        3
  •  9
  •   DVK    10 年前

    要解决问题的第二部分:Perl在线路噪声方面的声誉来自4种人:

    • 过于聪明(为了自己的利益)的黑客(有时只是黑客),他们看重聪明,炫耀自己的可读性。”如果很难写,就应该很难读懂“不仅仅是一种神话般的态度。

    • 不知道好的软件开发的人,如果它用一个cluebat击中他们的头部。例如,在程序中使用 $_ 而不是命名变量。在嵌套范围中。或者从未听说过评论。或自记录标识符。或空白。

    • 认为软件开发==code golf的人。更严重的是,代码中字符的数量越少,代码的可读性就越高,因为它们误解了代码中“简洁”的含义。

      (注:前2组不互斥)

    • 用Perl编写代码/进行黑客攻击的人(例如SysAdmins),他们几乎没有进行软件开发的培训、经验或动机。例如,使用Perl的人中,以糟糕的风格和糟糕的代码质量进行快速而肮脏的黑客攻击的比例可能高于Python。

      仅供参考,我$work中80%的糟糕Perl“代码”都属于这一类——它是由金融分析师编写的,他们足够聪明,能够拿起Perl书籍和一些早期的脚本,克隆出一个能满足业务需求的脚本,并且没有CS/编程背景,不必担心代码的可读性/可维护性。

    换言之,你可以写得漂亮、可读性极强且易于维护。 软件 在Perl中。这完全取决于谁写文章,他们的优先顺序和技能是什么。也, 就像其他语言一样 你可以写一篇悲惨的文章,只会把它弄乱。

    与其他语言的不同之处在于,在Perl中,所说mess的只写性实际上是由非常高密度的非字母字符(sygils和写得不好的regex中的特殊字符)组成的。这种高密度确实可以渐进地近似于线噪声。

        4
  •  6
  •   Hynek -Pichi- Vychodil Paulo Suassuna    15 年前

    因为这就是Perl的用途。因为Perl具有表现力、强大和快速。我用Perl编写的小而脏的脚本在几分钟内击败了很多次专门的产品。例如,外部连接和大连接与MySQL(仅仅因为不能做合并连接),ETL处理与Java Hadoop(因为我有多年的经验来有效地写它,Perl IO层是很好的)等等。

        5
  •  5
  •   Gregory    15 年前

    这是一个非常主观的问题。也许真正的答案是Perl有一个很好的语法(包括regex语法),这使得人们想要在它上面签名,而不是对其他语言的高度赞扬?imho,任何支持丰富的regex语法的语言在字符串操作上都会非常强大。

        6
  •  4
  •   Jim Lewis    15 年前

    现在的孩子们!回到那一天,我们所拥有的只是 SNOBOL --我们喜欢它!有时试试……你永远不知道,当这个PerlFad运行的时候,你可能会想要一些值得尊敬的东西支持它!

        7
  •  2
  •   Zak    15 年前

    Perl被广泛用于字符串操作任务,因为它的字符串操作API易于学习。而且它的regex也被广泛使用。它已经使用很长时间了,任何有Unix背景的人都可以很容易地获取Perl。历史上,Perl是在80年代后期为报表处理任务开发的,最初是为文本处理任务开发的。因此,到目前为止,这种趋势仍在继续,因为任何拥有字符串操作任务或文本处理任务的人都会选择Perl作为第一选择。这并不是说其他语言(如python)不能胜任这项任务,而是Perl在这一领域很受欢迎。

        8
  •  2
  •   brian d foy    15 年前

    我非常喜欢Perl,写关于它的书,出版关于它的杂志,等等。我不认为我会说这是最好的语言做任何事。很多事情都与你需要做的任务有关。对于许多字符串处理任务(ETL、数据清理等),Perl是一种非常强大和功能强大的语言。你做简单的任务不会有那么多麻烦。

    你的评论听起来像是来自20世纪90年代初,当时世界其他地方还没有赶上。许多动态语言现在都可以完成任务了,所以您可能不必切换语言。如果您决定使用Perl并遇到问题,这里有很多人愿意帮助您,如果您选择其他方法,并不是所有人都会责怪您。:)

        9
  •  1
  •   andreyv    15 年前

    一开始,Perl是为了便于报表处理和处理文本文件而开发的,因此它得到了非常强大的regex支持。关于regex的大部分信息都可以在 perldoc .

        10
  •  1
  •   cjm    15 年前

    我不同意Perl是文本处理的最佳语言。简单的事情很容易;用BAR代替FOO:

    $data =~ s/foo/bar/g;
    

    但困难的事情并不简单。看 Data::SExpression 例如。做一些非常简单的事情需要很多代码。

    Haskell和Parrow中的类似实现类似于:

    import Text.ParserCombinators.PArrow
    
    data Atom = QuotedString String | Symbol String
              deriving (Show, Eq)
    
    data Sexp = Sexp [Sexp] | Atom Atom
              deriving (Eq)
    
    
    quotedString :: Char -> Char -> MD a Atom
    quotedString quoteChar escapeChar = between q q inside >>^ QuotedString
        where q = char quoteChar
              inside = many $ (char escapeChar >>> anyChar) <+> notChar quoteChar
    
    doubleQuotedString, symbol :: MD a Atom
    doubleQuotedString = quotedString '"' '\\'
    symbol = word >>^ Symbol
    
    atom, sexp :: MD a Sexp
    atom = (doubleQuotedString <+> symbol) >>^ Atom
    sexp = atom <+> (between (char '(') (char ')') sexp' >>^ Sexp)
           where sexp' = sepBy1 sexp spaces
    

    只是说说而已。Perl并不是所有文本操作的结尾。与其他语言相比,选择Perl有很多原因,但解析并不是其中之一。

        11
  •  0
  •   MattG    15 年前

    Perl在很长一段时间内一直是流行的语言。问题是,它可能非常混乱,并且很难维护(有些人可以编写Perl来避免这种情况,但是编写丑陋的代码非常容易)。我不会告诉您避免使用Perl,但许多人已经转向了一些现代的替代方法。

    我建议学习一种较新的脚本语言,如python或ruby。两者都能很好地满足您的需求,并且可以在以后轻松地处理更困难的任务。在编写了这么长时间的C和Perl之后,它们都非常适合工作。

    简而言之,Perl是一个很好的锤子。巨蟒和红宝石将是钉枪。