Perl 程式中文風[注解]

《埃拉托斯芬篩法》

在網上見到Perl文言神作,拜服萬分。
由於原著高深,特此在賞析後來個註釋,雅俗共賞。

用籌兮用嚴  井涸兮無礙。
印曰最高矣  又道數然哉。
截起吾純風  賦小入大合。
習予吾陣地  並二至純風。
當起段賦取  加陣地合始。
陣地賦篩始  繫繫此雜段。
終陣地兮印  正道次標哉。
輸空接段點  列終註泰來。

出處: http://cqd.blogspot.hk/2006/04/perl.html?m=1

    用籌兮用嚴  井涸兮無礙。
    use integer; use strict; # 涸; 無礙;

    印曰最高矣  又道數然哉。
    print '最高', "數:";

    截起吾純風  賦小入大合。
    chomp (my $z = <STDIN>);

    習予吾陣地  並二至純風。
    study unshift my @w, 2 .. $z;

    當起段賦取  加陣地合始。
    while ($/ = shift +@w) {;

    陣地賦篩始  繫繫此雜段。
       @w = grep { ~~ $_ % $/

    終陣地兮印  正道次標哉。
       } @w; print +"next :";

    輸空接段點  列終註泰來。
       printf " ".$/."\n" } # 泰來

白話註釋

《埃拉托斯芬篩法》

    用籌兮用嚴  井涸兮無礙。 
    use integer; use strict; # 涸; 無礙;
  • :計數的用具,多用竹子製成,簽籌;算籌,意謂integer。
  • 井涸兮無礙: 詩中「井涸兮無礙」、「註泰來」皆為「虛詞」,沒有程式意義。
  • :# -> 井
  • 井涸兮無礙:食字。 「井涸」, 井乾涸了。「無礙」,沒有大礙。 全句為「井乾涸了也沒有大礙~」,用以呼應上句:「用籌兮用嚴」。「用籌兮用嚴 井涸兮無礙」兩句合意為:若然運用得謹慎,就算遇上井乾涸這樣的情況,也沒有甚麼大礙。

    印曰最高矣  又道數然哉。 
    print '最高', "數:";
    
  • 印曰/道:Print

  • :「,」

  • 數然: 然即「:」,「數:」

  • : 助語詞,大慨同「啊」

    截起吾純風  賦小入大合。 
    chomp (my $z = <STDIN>);
    
  • : 即C的Trim

    Perl的用法為 :「The chomp() function will remove (usually) any newline character from the end of a string. The reason we say usually is that it actually removes any character that matches the current value of $/ (the input record separator), and $/ defaults to a newline.」

  • : 「(」

  • :my

  • 純風: 作者以 「天干地支」 「地水火風」為Variable, 而這裡的syntax 「純」代表「$」,「純風」即「$z」

  • : 賦于,Assign

  • 小/大: 分別代表「<」和「>」。

  • : Perl中要輸入資料的方法就是使用<STDIN>,故為「入」。

  • :「)」

    習予吾陣地  並二至純風。 
    study unshift my @w, 2 .. $z;
    
  • 習予: 「study」直譯。

  • 陣地: 作者以 「天干地支」 「地水火風」為Variable, 而這裡的syntax 「陣」代表「@」。 Perl 「An array is a variable that stores an ordered list of scalar values. Array variables are preceded by an "at" (@) sign」,Array 亦為「陣」之意,故「陣地」則為「@w」。

  • 並二至純風: 並: 合并,即 Perl 的 unshift():

unshift():「This function places the elements from LIST, in order, at the beginning of ARRAY.」

  • 純風: 見上,即「$z」

    當起段賦取  加陣地合始。
    while ($/ = shift +@w) {;
    
  • : 判決、判處(《史記•卷一○七•魏其武安侯傳》:「乃劾魏其矯先帝詔,罪當棄市。」) ,即「while」。

  • : 「(」

  • : 「$/」,緣為:

「$/: The input record separator, newline by default」

  • : shift(): 「Shifts the first value of the array off and returns it」
  • 加陣地:「+@w」
  • : 「)」
  • : 當初;起初 即:「{」

    陣地賦篩始  繫繫此雜段。 
    @w = grep { ~~ $ % $/
    
  • 陣地賦篩始: 讀到應該開始理解到,陣地(@w) 賦(assign) 篩(grep) 始 ({)

  • 繫繫:「繫繫此雜段」中的「繫繫」為虛詞。 亦為「~~」之形象。數學有言「負負得正」,文中「繫繫」的意思,是把「零」及「壹」反轉兩次,復歸原本,正正帶著「負負得正」的概念。

  • : 「$_」

    「$_:The default input and pattern-searching space」

  • :「Binary "%" is the modulo operator」, % 亦為Perl 之HASH,Hash 之直譯為「雜」,Perl hash 例子:

    my %petsounds = ("cat" => "meow",
                     "dog" => "woof",
                     "snake" => "hiss");
    
  • : 「$/」

    終陣地兮印  正道次標哉。 
    } @w; print +"next :";
    
  • : 「}」

  • : 文言助詞。

  • 印/道: 同解「printf」

  • : + 的直譯。

  • 次標: 「next:」的直譯。

  • :助語詞,大慨同「啊」

    輸空接段點  列終註泰來。 
    printf " ".$/."\n" } # 泰來
    
  • : 解「printf」

  • 輸空接段點: 神句!!! 「printf " ".$/.」

    • printf (輸)
    • " " (空)
    • . (接)
    • $/ (段)
    • . (點)
  • : 列,解作排成的行,即「\n」。

  • : 「}」

  • : 註釋,comment。

  • 泰來: 出自 前蜀 韋莊《湘中作》詩:「否去泰來終可待,寒夜休唱《飯牛歌》。」 即「厄運過去,好運到來」之意。

我也譯完了, #泰來 m(_ _)m

參考:

comments powered by Disqus