Friday, August 20, 2010

Perl的__DATA__

在簡單的Perl Script中,常常會在程式碼的結尾加上一列__DATA__,然後在底下放入程式所需的資料。

#!/usr/bin/perl
use 5.010;

while (my $name = <data>) {
chomp $name;
say "Hello, $name!";
}

__DATA__
Peter
Jack
Obama

問題來了,如果DATA的內容需要讀取不只一遍的時候,你沒辦法直接用seek回到DATA的最前端。這是因為DATA其實是整個script檔案的filehandle,當你第一次使用它的時候,其offset其實設在__DATA__這列之後。所以若需要讀取DATA兩遍以上,需要先以

my $pos = tell DATA;

紀錄DATA一開始的position,然後在讀取第二遍之前,以

seek DATA, $pos, 0;

回到這個filehandle原先的位置。

No comments:

Post a Comment