How can I use __DATA__ twice?

后端 未结 3 1260
耶瑟儿~
耶瑟儿~ 2020-12-25 12:09

How can I use __DATA__ twice?

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

while (  ) {
    print;
}

while (  ) {
           


        
相关标签:
3条回答
  • 2020-12-25 12:49

    In all honesty, the easiest solution is to read DATA once and stash it in an array or variable.

    my @data;
    while(<DATA>){
      push @data, $_;
    }
    
    0 讨论(0)
  • 2020-12-25 13:01

    You can use the Data::Handle module to do the tell()ing and seek()ing for you behind the scenes. (Though I believe if you have perl 5.10 or later you can dup the DATA file handle instead of sharing the original DATA file handle and seeking back and forth in it.)

    0 讨论(0)
  • 2020-12-25 13:02

    To use the DATA filehandle twice you need to rewind it. The tricky bit is that if you do seek(DATA, 0, 0), it'll be positioned to the first source line, not the line after __DATA__. Therefore you need to save the position first:

    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>);
    

    See also:

    • tell
    • seek
    0 讨论(0)
提交回复
热议问题