perl - मैं__DATA__ को दो बार कैसे उपयोग कर सकता हूं?




filehandle (2)

मैं __DATA__ दो बार कैसे उपयोग कर सकता हूं?

#!/usr/local/bin/perl
use warnings;
use 5.012;

while ( <DATA> ) {
    print;
}

while ( <DATA> ) {
    chomp if $. == 1;
    print scalar reverse;
    print "\n" if eof;
}
__DATA__
one
two
three
four
five
six

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


DATA फ़ाइल को दो बार उपयोग करने के लिए आपको इसे रिवाइंड करने की आवश्यकता है। मुश्किल बात यह है कि यदि आप 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>);

यह भी देखें: