一個共同的「Perlism」被以這種形式在生成一個列表的東西循環:我可以使用解壓將字符串拆分爲Perl中的字符嗎?
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)
,但有沒有其他方式看起來像globbing?即,我可以在列表上下文中還是在循環中調用unpack(some_format,$str)
,以便解壓縮將返回格式組中的下一組字符,直到$ 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";
}
我知道它必須簡單!現在我玩了,'「(A1)*」'將glob(我的問題)和'「(A1)$ i」'生成$ i字段。桃色!你知道在哪裏被記錄在一個好方法嗎?網絡上的大多數資料並不好... – dawg 2010-04-20 19:12:22
@drewk:在'perldoc -f pack'(http://perldoc.perl.org/functions/pack.html)at「Suppating a * for the repeat count而不是數字意味着使用,但是剩下的許多項目......「和」A() - 組是包含在括號中的子模板...「 – Ether 2010-04-20 19:14:49
@其他:perldoc中的示例在此沒有對我說話案件。 「*」的大部分用法都是「吞噬其餘」的形式,如在「解壓」a3/A * *,'007 Bond J'中一樣。 ('Bond','J')',我認爲perldoc在pack/unpack上可能會更清晰... – dawg 2010-04-20 19:21:16