- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一个常见的“Perlism”正在生成一个列表作为以这种形式循环的东西:for($str=~/./g) { print "the next character from \"$str\"=$_\n"; }
在这种情况下,全局匹配正则表达式会返回一个列表,该列表是字符串 $str
中的一个字符。 , 并将该值赋给 $_
split
而不是正则表达式可以用同样的方式或'a'..'z'
, map
, ETC。
我正在调查 unpack
逐个字段解释字符串生成字段。我总能找到 unpack
对我的大脑工作方式不那么直截了当,而且我从未真正深入研究过它。
作为一个简单的例子,我想使用 unpack 从字符串中生成一个每个元素中的一个字符的列表(是的——我知道我可以用 split(//,$str)
和 /./g
来做到这一点,但我真的想看看 unpack 是否可以以这种方式使用...)
显然,我可以使用 unpack("A1" x length($str), $str)
的字段列表进行解包。但是还有其他一些看起来像 globbing 的方式吗?即,我可以调用unpack(some_format,$str)
吗?在列表上下文中或在循环中,这样 unpack 将返回格式组中的下一组字符,直到 $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";
}
最佳答案
pack
和 unpack
模板可以使用括号对事物进行分组,就像正则表达式一样。该组可以跟随重复计数。 *
作为重复计数的意思是“重复直到你用完打包/解包的东西”。
for(unpack("(A1)*", $str)) {
print "unpack: \$_=$_\n";
}
关于perl - 我可以使用 unpack 将字符串拆分为 Perl 中的字符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2677783/
我是一名优秀的程序员,十分优秀!