Perl 5.8 升級至 Perl 5.10

FreeBSD 前陣子才將 Perl 5.10 放入 FreeBSD Ports System 內 (Perl 5.10 在 2007/12/18 發行,到 2009 年三月才進 ports...)

不管怎麼樣,總是進 ports 了... 得測試看看要怎麼從 5.8.9 升級到 5.10.0。在 /usr/ports/UPDATING 提供了 portupgradeportmaster 的升級方式:

20080328:
  AFFECTS: users of lang/perl*
  AUTHOR: skv@FreeBSD.org

  lang/perl5.10 is out. If you want to switch to it from, for example
  lang/perl5.8, that is:

  Portupgrade users:
    0) Fix pkgdb.db (for safety):
        pkgdb -Ff

    1) Reinstall perl with new 5.10:
        portupgrade -o lang/perl5.10 -f perl-5.8.\*

    2) Reinstall everything that depends on Perl:
        portupgrade -fr perl

  Portmaster users:
        portmaster -o lang/perl5.10 lang/perl5.8
        portmaster -r perl\*

原則上照著 UPDATING 做就可以,不過 portmaster 的部份似乎是錯的 (看起來是軟體 bug),用 -r 並不會將相依 perl-5.10.0 的 ports 強制更新。

後來還是先 portmaster -BDuw p5\*,然後再看還有哪些東西在 /usr/local/lib/perl5/site_perl/5.8.9 下面,手動跑 portmaster 重新安裝。

Perl on Google App Engine

Python 是第一個可以在 Google App Engine (GAE) 上執行的程式語言,而下一個很有可能是 Perl

Brad Fitzpatrick 在他的 Blog 上說,他被 GAE team 允許對外公佈「我可以使用 20% 的時間開發 Perl on GAE」:Perl on App Engine

這是 GAE 支援其他程式語言的消息中,第一個被正式公開的。在 Brad Fitzpatrick 的文章裡面有一些藍圖,關於他大概會怎麼做的想法。我們應該可以期待他認真起來的戰鬥力 :p

PS:Brad Fitzpatrick 是 LiveJournal 的創辦人、memcached 的作者、OpenID 的制定人。

Perl 5.10.0

上一堆 ports maintainer 要傷腦筋處理 5.8 與 Perl 5.10 之間的相容性問題了...

Perl 5.10.0 除了修正 bug 外,在效率上也做了許多改進,在 可以查到完整的內容,幾個我比較有興趣的:

  • 引入 // 運算子。以前寫 defined $a ? $a : $b,現在可以寫 $a // $b。同理,$a //= $b 等價於 $a = (defined $a ? $a : $b),表示 $a 沒有被定義時塞入 $b。另外,//|| 有相同的優先權。
  • 有了 switch-case-default 的架構,不過在 Perl 裡叫 given-when-default
  • 更快的 Regular Expression Engine,以及一些變動。
  • Perl 內建的 資料庫更新到 5.0.0。
  • 新增了一堆 module...
  • 一堆效能的改善...

反正用就是了 XD

對了,大力推薦 ,試圖在 Win32 平台上建立一個簡單而且強大的 Perl 環境,目前還是 Perl 5.8.8,等他正式推出 Perl 5.10.0 的版本...

如果要測試的人可以參考 這篇抓 Beta 2 版測試。

Update:除了上面所說的,另外還有 提到的 say (與 print + \n) 以及 ~~ (與 grep + eq) 的效能比較。

Update 5.10.0 正式出版了!

Perl 與 Python 在 Unicode 的處理

我試著在 上找到 Perl Regular Expression 有提供的 General Category Property,不過沒有找到。而且發現 沒有使用

先參考 上的文件, 這篇,在 Regular Expression 裡使用 General Category Property 指的是 \p{Lu} 這種用法,前面的範例表示大寫字母 (Uppercase Letter),我在用 切詞的時候用了兩次這種 Regular Expression。

替代的方案是依照 裡的說法去找對應的範圍,然後自己寫 Regular Expression。

Update 比較清楚,直接把 Hex Start 與 Hex End 列出來。

Perl 5.9.5

上看到 5.9.5 的消息:Perl 5.9.5 release,這個版本會是 5.9 的最後一個版本,現在的重點將會放在穩定性上面,然後出 5.10.0。(如同 一樣,奇數版本是開發版,偶數版本才是穩定版)

剛好這幾天在 的 mailing list 找資料的時候發現 5.9 上的速度大幅增加:[Dbix-class] Re: New Class::C3 dev releases,而且也有不少人回報 啟動的速度時間大幅減少,對於用 的開發者是一大福音啊...

寫個 Perl 學到多少東西

整理一下,為了寫這次的東西多學了多少 Perl Module 的用法: