我可以在Perl中使用unpack将字符串拆分为字符吗?
一个常见的“Perlism”是生成一个列表,以这种形式循环:我可以在Perl中使用unpack将字符串拆分为字符吗?,perl,unpack,Perl,Unpack,一个常见的“Perlism”是生成一个列表,以这种形式循环: for($str=~/./g){打印\“$str\”=$\n”;} 在这种情况下,全局匹配正则表达式从字符串$str中依次返回一个字符的列表,并将该值分配给$\ucode> 代替正则表达式,split可以以相同的方式使用,或者'a'..'z',map等 我正在调查unpack以生成字符串的逐字段解释。我总是发现unpack对我的大脑工作方式不那么直接,我从来没有真正深入研究过 作为一个简单的例子,我想使用unpack从字符串中生成一个
for($str=~/./g){打印\“$str\”=$\n”;}
在这种情况下,全局匹配正则表达式从字符串$str
中依次返回一个字符的列表,并将该值分配给$\ucode>
代替正则表达式,split
可以以相同的方式使用,或者'a'..'z'
,map
等
我正在调查unpack
以生成字符串的逐字段解释。我总是发现unpack
对我的大脑工作方式不那么直接,我从来没有真正深入研究过
作为一个简单的例子,我想使用unpack从字符串中生成一个列表,每个元素中有一个字符(是的——我知道我可以使用split(/,$str)
和//g
,但我真的想看看unpack是否可以这样使用……)
显然,我可以使用一个字段列表来解包,它是unpack(“A1”x长度($str),$str)
,但是有没有其他类似于globing的方式呢?也就是说,我可以在列表上下文或循环中调用unpack(some_format,$str)
,这样unpack将返回格式组中的下一组字符,直到$str被选中为止
我已经读过了,而且
以下是示例代码:
#!/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
模板可以像regexp一样使用括号对内容进行分组。该组后面可以跟一个重复计数<代码>*
作为重复计数的意思是“重复,直到你没有东西可以打包/解包”
你必须运行一个基准来找出其中哪一个是最快的。我知道它必须很简单!!!现在我玩它,
“(A1)*“
将全局(我的问题),而“(A1)$I”
将生成$I字段。桃子!你知道在哪里有好的记录吗?网络上的大多数材料都不太好…@drewk:inperldoc-f pack
()中的“为重复计数提供一个*而不是一个数字意味着使用剩余的项目数量…”和“a()-组是一个括在括号中的子模板…”以太:在这种情况下,perldoc中的示例与我无关。*
的大多数用法都是以“吞下其余部分”的形式出现的,如解包“a3/A*”、“007 Bond J”;给出('Bond','J')
,我认为pack/unpack上的perldoc可能更清楚…@Ether:pack(@1A(@2A)@3A)”,qw[xyz])的()组模板下的例子产生“\0X\0\0YZ”是一个只有作者才会喜欢的例子:-}
for(unpack("(A1)*", $str)) {
print "unpack: \$_=$_\n";
}