Rubyish Perl - 又像 Ruby 又像 Perl

作者:   發佈於: ,更新於:   #perl #ruby

前一陣子 shelling 寫了一個 Rubyish::Attribute 模組,把 ruby 語言中的 attraccessor、attrwriter、attr_reader 這幾個 class method 借過來用。而這件事在一番討論之後,被衍生成為了 Rubyish Perl 這個主題:Ruby 語言有那麼多可愛的詞彙,為何不全部假借過來用?

目前的實做中,已經允許使用 class 來定義類別,並用 def 來定義方法(或函式),如下範例:


#!/usr/bin/perl
# cat.pl
use strict;
use Rubyish::Syntax::class;

class Cat {
    def sound { "meow" };
};

my $pet = Cat->new;
print $pet->sound # "meow"

使用 def 來定義物件方法時,也可以加上參數的宣告:


def hi($name) {
    print $name;
}

並且,由 def 所定義出來的函式本體中,會被植入一個本地變數 $self。以上程式碼其實等價於:


sub hi {
    my ($self, $name) = @_;
    print $name;
}

除了這兩項在文法上的增益之外,還有 nil 可以用來表示空值。 而此 nil 與 Ruby 語言中相同,是個 NilClass 的 singleton 物件:


print nil->to_i; # 0

目前實做中的幾個主要的物件類別有:

Rubyish::Array
Rubyish::Hash
Rubyish::String
Rubyish::Enumerable
Rubyish::Object
Rubyish::Class
Rubyish::Module
Rubyish::Kernel

都分別直接對應到 Ruby 語言下的物件類別。

此外,也利用了 autobox 這個 pragma,讓 rubyish perl5 的程式看起可以非常類似 Ruby:


use Rubyish;
use Rubyish::Autobox;

puts "food"->gsub(qr/oo/, "nor"); # fnord

目前這個有趣的計畫的原始碼放置在 Github 上:gugod/rubyish-perl/,歡迎大家參考。想要參與的人也請稍個信來,或是加入 chupei.pm 的 irc 頻道。讓我可以開 commit bit 給你。