一个常见的'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)可以在列表上下文或循环中调用,以便解压缩将返回格式组中的下一组字符,直到$ str被排除?
我已经阅读了Perl 5.12 Pack pod和Perl 5.12 pack教程以及Perkmonks教程
以下是示例代码:
#!/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)) …Run Code Online (Sandbox Code Playgroud)