gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 14:20:16 26 4
gpt4 key购买 nike

一个常见的“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 podPerl 5.12 pack tutorialthe 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";
}

最佳答案

packunpack模板可以使用括号对事物进行分组,就像正则表达式一样。该组可以跟随重复计数。 *作为重复计数的意思是“重复直到你用完打包/解包的东西”。

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

你必须运行一个基准来找出其中哪一个是最快的。

关于perl - 我可以使用 unpack 将字符串拆分为 Perl 中的字符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2677783/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com