Rubyish Perl - 又像 Ruby 又像 Perl
作者:gugod 發佈於: ,更新於: #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 給你。