Yaygın bir 'Perlism' Bu formdaki döngüye şey olarak bir liste üzerinde oluşturuyor: Bu durumdaBir dizeyi Perl'deki karakterlere bölmek için paketi açabilir miyim?
for($str=~/./g) { print "the next character from \"$str\"=$_\n"; }
küresel maç regex dize $str
dan sırayla bir karakterdir bir listesini döndürür, ve ben olduğumu $_
, split
aynı şekilde kullanılabilir veya 'a'..'z'
, map
değer, vb
atar Bir dizgenin alan yorumuna göre bir alan oluşturmak için unpack
numaralı kazıma. Beynimin çalışma şekline daha az açık olmak için her zaman unpack
'u buldum ve bunu hiç bu kadar derinden kazmadım.
Basit bir örnek olarak, açmayı kullanarak bir dizeden her öğede bir karakter olan bir liste oluşturmak istiyorum (evet - split(//,$str)
ve /./g
ile yapabileceğimi biliyorum, ancak paketin açılıp açılmayacağını gerçekten görmek istiyorum. Bu şekilde kullan ...)
Açıkçası, unpack("A1" x length($str), $str)
paketini açmak için bir alan listesi kullanabilirim, ancak başka şekilde globbing gibi görünüyor mu? Örneğin, liste bağlamında unpack(some_format,$str)
numaralı telefonu arayabilir miyim veya bir döngü içinde, paketin sonraki karakter grubunu $ str bitene kadar format grubunda döndürebilir miyim?
Ben The Perl 5.12 Pack pod okudum ve Perl 5.12 pack tutorial ve the Perkmonks tutorial
İşte örnek kod:
#!/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";
}
Basit olması gerektiğini biliyordum! Şimdi onunla oynayacağım, "(A1) *" '(soru) ve (") "(A1) $ i" ($) alanlarını oluşturacak. Harikayız! Bunun iyi bir şekilde belgelendiğini biliyor musunuz? Web'deki malzemelerin çoğu büyük değildi ... – dawg
@drewk: "perldoc -f paketinde" (http://perldoc.perl.org/functions/pack.html) "Tekrar sayımı için bir * sağlama bir sayı yerine kullanmak yerine birçok öğe kalıyor ... "ve" A() -grubu parantez içine alınmış bir alt-ŞABLON ... " – Ether
@Ether: Perldoc'taki örnekler bu konuda benimle konuşmadı vaka. '' 'Nin çoğunun kullanımı 'a3/A A *', '007 Bond J' paketini açarken olduğu gibi 'geri kalanı gobble' biçimindeydi; verir ('Bond', 'J') 've paketin/paketin üzerindeki perldoc'un daha açık olabileceğini düşünüyorum - daha açık ... – dawg