http://subtech.g.hatena.ne.jp/miyagawa/20080708/1215473551
絶望した!rubyと比較したときのperlの難解さに絶望した!
#!/usr/bin/perl use strict; # ここはpackage main; BEGIN { # プログラムのはじめにサブルーチンを定義.なくても動いたりする # ()は プロトタイプ. 引数をとらないことを言明してる # Xクラスのコンストラクタ, 実体は$sのリファレンス sub X () { bless \(my $s = "ひだまり"), "X" } # _ == 1 にする sub _ () { 1 } } package X; # ここからXクラスの定義 my $i; # クロージャ変数だけど,スコープはファイルだよ use overload # X オブジェクトの / と < 演算子を定義 # $_[0]には演算子の左側, $_[1]には演算子の右側の値が入ってる # $_[0] はXオブジェクト == スカラリファレンス # デリファレンスすると文字列 # 呼ばれるたびに文字列を足してく "/" => sub { ${$_[0]} .= $i++ ? "365" : "スケッチ"; $_[0] }, # 演算子の左側と演算子の右側をつなげてprint "<" => sub { print ${$_[0]}, " ", $_[1], "\n" }; package main; # mainにもどる X / _ / X < "来週も見てくださいね!"; # ( (X / _) / X ) < "来週もみてくださいね!" => / が一回呼ばれる # ( X / X ) < "来週もみてくださいね!" => / がもう一回呼ばれる # X < "来週もみてくださいね!" => < が呼ばれる