29

Where can I find more about the following syntax in perl?

The connection between <DATA> and __DATA__ is unclear.

while (my $date_string = <DATA>) {
  chomp($date_string);
  next if not length $date_string;
  print "$date_string ist Unixtime ",
        $lang_date->str2time($date_string),
        " und ",
    $lang_date->time2str( '%d.%m.%Y %T (%Z)',$lang_date->str2time($date_string) ),
        "\n";
}

__DATA__
1.3.1999
1 Marz 1999
1. Marz 1999
1/3/1999
Skip
  • 6,240
  • 11
  • 67
  • 117

2 Answers2

35

Quoting the doc:

The __DATA__ token tells the perl compiler that the perl code for compilation is finished.

Everything after the __DATA__ token is available for reading via the filehandle FOOBAR::DATA, where FOOBAR is the name of the current package when the __DATA__ token is reached.

This works just the same as __END__ does in package 'main', but for other modules data after __END__ is not automatically retrievable, whereas data after __DATA__ is.

Can add to this only that using __DATA__ section is quite handy to illustrate some file reading-related concepts in Perl. it's basically a file attached to a code, and contents of this file are easily accessible through <DATA>. That's why it's quite popular here on SO. )

raina77ow
  • 103,633
  • 15
  • 192
  • 229
6

Everything after __DATA__ is treated as a file you can read from the filehandle DATA. DATA is opened automatically and you don't have to do anything to get it that way.

What isn't clear? Your program seems to be using it properly.

Andy Lester
  • 91,102
  • 13
  • 100
  • 152
  • its not my program, its a peace of code I found on the internets and did not understand – Skip Nov 20 '12 at 08:13