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

我可以在Perl中使用unpack将字符串拆分为字符吗?,perl,unpack,Perl,Unpack,一个常见的“Perlism”是生成一个列表,以这种形式循环: for($str=~/./g){打印\“$str\”=$\n”;} 在这种情况下,全局匹配正则表达式从字符串$str中依次返回一个字符的列表,并将该值分配给$\ucode> 代替正则表达式,split可以以相同的方式使用,或者'a'..'z',map等 我正在调查unpack以生成字符串的逐字段解释。我总是发现unpack对我的大脑工作方式不那么直接,我从来没有真正深入研究过 作为一个简单的例子,我想使用unpack从字符串中生成一个

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

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:in
perldoc-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";
}