2010-12-16 19 views

उत्तर

42

दो बार DATA filehandle उपयोग करने के लिए आप इसे रिवाइंड करने के लिए की जरूरत है। मुश्किल बात यह है कि यदि आप seek(DATA, 0, 0) करते हैं, तो इसे पहले स्रोत लाइन पर रखा जाएगा, न कि __DATA__ के बाद की रेखा। इसलिए आप पहले की स्थिति को बचाने की जरूरत:

my $data_start = tell DATA; # save the position 
print while (<DATA>); 
seek DATA, $data_start, 0; # reposition the filehandle right past __DATA__ 
print while (<DATA>); 

यह भी देखें:

7

आप tell()ing और seek() के लिए ing करने के लिए Data::Handle मॉड्यूल का उपयोग कर सकते हैं आप दृश्यों के पीछे। (हालांकि मेरा मानना ​​है कि यदि आप पर्ल 5.10 है या बाद में आप मूल DATA फ़ाइल संभाल साझा करने और उस में आगे और पीछे की मांग के बजाय DATA फ़ाइल संभाल dup कर सकते हैं।)

+0

आप dup सकते हैं (या fdopen) पर्ल के अन्य की तुलना में में आंकड़े 5.10, लेकिन ऐसा लगता है कि यह केवल 5.8.9 ((और संभावित रूप से अन्य संस्करणों के बीच है, लेकिन 5.8.0 और 5.10.0 सहित) आपको फ़ाइल-हैंडल प्रति अलग पॉइंटर्स रखने देता है। इसलिए आपको अभी भी अपने पीछे और आगे की तलाश करने की आवश्यकता है डुप्लेड फ़ाइलहेडल, या बस डेटा :: हैंडल का उपयोग करें। – MkV

संबंधित मुद्दे