एक आम 'Perlism' इस रूप में पाश के लिए कुछ के रूप में एक सूची से अधिक पैदा कर रहा है:क्या मैं पर्ल में वर्णों में स्ट्रिंग को विभाजित करने के लिए अनपैक का उपयोग कर सकता हूं?
for($str=~/./g) { print "the next character from \"$str\"=$_\n"; }
इस मामले में वैश्विक मैच regex एक सूची है कि स्ट्रिंग $str
से बदले में एक चरित्र है देता है, और $_
, split
एक ही तरीके से इस्तेमाल किया जा सकता या 'a'..'z'
, map
है कि मूल्य, आदि
मैं में हूँ प्रदान करती है एक स्ट्रिंग के क्षेत्र की व्याख्या द्वारा क्षेत्र उत्पन्न करने के लिए unpack
को निहित करना। मुझे हमेशा unpack
मिला है जो मेरे दिमाग के काम के तरीके से कम सरल है, और मैंने कभी भी उसमें गहराई से खोला नहीं है।
एक सरल मामले के रूप में, मैं एक सूची है कि एक स्ट्रिंग से प्रत्येक तत्व में एक चरित्र खोल उपयोग कर रहा है उत्पन्न करना चाहते हैं (हाँ - मैं जानता हूँ कि मैं split(//,$str)
और /./g
साथ यह कर सकते हैं, लेकिन मैं वास्तव में अगर खोलना कर सकते हैं देखना चाहते हैं इस तरह इस्तेमाल किया जा सकता है ...)
जाहिर है, मैं unpack("A1" x length($str), $str)
अनपॅक के लिए फ़ील्ड सूची का उपयोग कर सकता हूं लेकिन क्या ऐसा कोई अन्य तरीका है जो ग्लोबिंग की तरह दिखता है? यानी, क्या मैं सूची संदर्भ में या लूप में 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";
}
मुझे पता था कि यह सरल होना था !!! अब जब मैं इसके साथ खेलता हूं, '' (ए 1) * "' ग्लोब (मेरा प्रश्न) और '" (ए 1) $ i "' i फ़ील्ड उत्पन्न करेगा। पीची! क्या आप जानते हैं कि इसे एक अच्छे तरीके से दस्तावेज किया गया है? वेब पर अधिकांश सामग्री बहुत अच्छी नहीं थी ... – dawg
@drewk: 'perldoc -f pack' (http://perldoc.perl.org/functions/pack.html) में "दोहराना गिनती के लिए * आपूर्ति करना" पर एक संख्या के बजाय उपयोग करने का मतलब है हालांकि कई आइटम छोड़े गए हैं ... "और" ए() -ग्रुप एक उप-टेम्पलेट कोष्ठक में संलग्न है ... " – Ether
@ अन्य: पेल्डडोक में उदाहरण मुझसे इस बात से बात नहीं करते थे मामला। '*' के अधिकांश उपयोग 'अनपैक' ए 3/ए ए * ',' 007 बॉन्ड जे 'के रूप में' बाकी को घुमाए 'के रूप में थे; देता है ('बॉन्ड', 'जे') 'और मुझे लगता है कि पैक/अनपैक पर पेल्डडॉक हो सकता है - अधिक स्पष्ट ... – dawg