読者です 読者をやめる 読者になる 読者になる

詳説 Perl in ゆの

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 < "来週もみてくださいね!"                => < が呼ばれる