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

在Perl中,我可以使用unpack将字符串拆分为字符吗?

  •  6
  • dawg  · 技术社区  · 15 年前

    一个常见的“Perlism”是生成一个列表,作为某种东西以这种形式循环:

    for($str=~/./g) { print "the next character from \"$str\"=$_\n"; }

    $str ,并将该值赋给 $_

    而不是正则表达式, split 'a'..'z' , map

    我正在调查 unpack 生成字符串的逐字段解释。我总是发现

    作为一个简单的例子,我想使用unpack从字符串中生成一个列表,每个元素中有一个字符(是的,我知道我可以用 split(//,$str) /./g 但我真的很想看看解包是否可以这样使用……)

    unpack("A1" x length($str), $str) 但是有没有其他的方式看起来像是全球化?艾丽,我能打电话吗 unpack(some_format,$str)

    The Perl 5.12 Pack pod 以及 Perl 5.12 pack tutorial the Perkmonks tutorial

    以下是示例代码:

    #!/usr/bin/perl
    use warnings;
    use strict;
    
    my $str=join('',('a'..'z', 'A'..'Z')); #the alphabet...  
    
    $str=~s/(.{1,3})/$1 /g;                #...in groups of three
    print "str=$str\n\n";
    
    for ($str=~/./g) { 
     print "regex: = $_\n";
    }
    
    for(split(//,$str)) {
     print "split: \$_=$_\n";
    }
    
    for(unpack("A1" x length($str), $str)) {
     print "unpack: \$_=$_\n";
    }
    
    1 回复  |  直到 15 年前
        1
  •  9
  •   cjm    15 年前

    pack unpack 模板可以使用括号来分组,就像regexp一样。组后面可以跟一个重复计数。 * 重复计数的意思是“重复,直到你没有东西可以打包/解包”。

    for(unpack("(A1)*", $str)) {
        print "unpack: \$_=$_\n";
    }