Powszechnym „Perlism” generuje listę jako coś do pętli przez ten formularz:Czy mogę użyć polecenia rozpakuj, aby podzielić ciąg znaków na znaki w Perlu?
for($str=~/./g) { print "the next character from \"$str\"=$_\n"; }
W tym przypadku globalny mecz regex zwraca listę, która jest o jeden znak z kolei z łańcucha $str
, i przypisuje tę wartość do $_
Zamiast regex, split
mogą być używane w ten sam sposób lub 'a'..'z'
, map
itp
jestem w śledzenie unpack
w celu wygenerowania interpretacji ciągu za pomocą pola. Zawsze uważałem, że unpack
nie jest tak proste, jak działa mój mózg i nigdy tak naprawdę nie wkopałem się w to głęboko.
Jako prosty przypadek, chcę wygenerować listę, która jest jeden znak w każdym elemencie z ciągu za pomocą rozpakowywania (tak - wiem, że mogę to zrobić z split(//,$str)
i /./g
, ale naprawdę chcę zobaczyć, czy można rozpakować być użyty w ten sposób ...)
Oczywiście, mogę użyć listy pól do rozpakowania, która jest unpack("A1" x length($str), $str)
, ale czy istnieje inny sposób, który wygląda na globbing? tzn. czy mogę wywołać unpack(some_format,$str)
w kontekście listowym lub w pętli tak, że rozpakowanie zwróci następną grupę znaków w grupie formatu, dopóki nie zostanie wyzerowany $ str?
Czytałem The Perl 5.12 Pack pod i Perl 5.12 pack tutorial i the Perkmonks tutorial
Oto przykładowy 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";
}
Wiedziałem, że to musi być proste !!! Teraz, kiedy gram z nim, "" (A1) * "' będzie glob (moje pytanie) i "" (A1) $ i "' wygeneruje pola $ i. Aksamitny! Czy wiesz, gdzie jest to udokumentowane w dobry sposób? Większość materiałów w sieci nie była wspaniała ... – dawg
@drewk: in 'perldoc -f pack' (http://perldoc.perl.org/functions/pack.html) w" Dostarczanie * liczby powtórzeń zamiast liczby oznacza użycie, ale pozostało wiele pozycji ... "i" grupa A() jest pod-szablonem zawartym w nawiasach ... " – Ether
@Ether: przykłady w perldoc nie mówiły do mnie w tym walizka. Większość zastosowań '*' miało formę "pożarcia reszty" jak w 'rozpakowaniu' a3/A A * ',' 007 Bond J '; daje ('Bond', 'J') 'i myślę, że perldoc na opakowaniu/rozpakowaniu może być - jaśniej ... – dawg