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原先的位置。

Tuesday, August 3, 2010

Textbooks

Every basic thing you should know, every kind of skills with which you should be equipped...

Young kid, they are all in books.

Go ahead. Read 'em all.