【问题标题】:How do I get the length of a string in Perl?如何在 Perl 中获取字符串的长度?
【发布时间】:2010-09-18 09:55:12
【问题描述】:

strlen() 的 Perl 等价物是什么?

【问题讨论】:

    标签: perl string


    【解决方案1】:

    length($string)

    perldoc -f 长度
    
       长度 EXPR
       length 返回 EXPR 值的字符长度。如果 EXPR 是
               省略,返回 $_ 的长度。请注意,这不能用于
               整个数组或散列以找出它们有多少元素。为了
               也就是说,分别使用“scalar @array”和“scalar keys %hash”。
    
               注意字符:如果 EXPR 是 Unicode,你会得到 num-
               ber 字符,而不是字节数。得到长度
               字节,使用“做{使用字节;长度(EXPR)}”,见字节。
    

    【讨论】:

    • 如果有例子你的答案会更好。
    • 如果字符串包含嵌入的零(例如,由于将部分或整个 二进制文件 读取到字符串中)怎么办? “长度”可能不是完全等价的。
    • @PeterMortensen 的问题是与strlen 的等价物,它也停止在嵌入的零上。
    【解决方案2】:
    length($string)
    

    【讨论】:

      【解决方案3】:

      虽然 'length()' 是应该在任何健全的代码中使用的正确答案,但应该提到 Abigail's length horror,如果只是为了 Perl 知识。

      基本上,诀窍在于使用包罗万象的音译运算符的返回值:

      print "foo" =~ y===c;   # prints 3
      

      y///c 用自己替换所有字符(感谢补码选项'c'),并返回替换的字符数(因此,实际上是字符串的长度)。

      【讨论】:

      • y 的计数模式实际上并不修改字符串,因此即使在只读值上它们也能正常工作。
      • @Yanick 我无法阅读“阿比盖尔的长度恐怖”的链接,请您解释一下吗?我知道这个话题很老,但是有像我这样的新人感兴趣。
      • @bashophil 为避免社交文本登录而延迟更改了指向 archive.org 的链接
      【解决方案4】:

      length() 函数:

      $string ='String Name';
      $size=length($string);
      

      【讨论】:

      • 嗨,欢迎来到 SO!我不确定这个答案在十多年后,在这个问题被提出和回答之后增加了什么?
      【解决方案5】:

      您不应该使用它,因为 length($string) 更简单且更具可读性,但我在查看代码时遇到了其中一些并且感到困惑,所以如果其他人这样做,这些也会得到长度一个字符串:

      my $length = map $_, $str =~ /(.)/gs;
      my $length = () = $str =~ /(.)/gs;
      my $length = split '', $str;
      

      前两个使用全局标志来匹配字符串中的每个字符,然后使用标量上下文中返回的匹配列表来获取字符数。第三个类似地通过拆分每个字符而不是正则表达式匹配并在标量上下文中使用结果列表

      【讨论】:

        【解决方案6】:

        不是答案,而是观察:我正在运行为 darwin-2level 构建的 v5.30.2,并且我注意到如果我不首先 chomp 我的输入(与标准输入一样),然后计算长度,单个字符的length不是1,而是2。

        记住那些可能是一个因素的换行符和其他隐藏字符。

        我很想找到阿比盖尔的帖子,但可惜它似乎已经被以太消耗了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-08
          • 2015-07-29
          • 2011-05-13
          • 1970-01-01
          • 2010-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多