Skip to content

Instantly share code, notes, and snippets.

@Shinpeim
Created June 27, 2012 09:58
Show Gist options
  • Save Shinpeim/3003060 to your computer and use it in GitHub Desktop.
Save Shinpeim/3003060 to your computer and use it in GitHub Desktop.
package TwitterUser;
use strict;
use warnings;
# TwitterUser->new('シャークこすげ','9m'); を期待
sub new{
my ($class_name, $name, $screen_name) = @_;
warn $class_name; # => "TwitterUser"
warn $name; # => "シャークこすげ"
warn $screen_name; # => 9m
bless {
name => $name,
screen_name => $screen_name,
}, $class_name; # ハッシュリファレンスに、TwitterUserというpackageを関連づけて返す
}
# メソッドとして呼ばれることを期待している
# $obj->twit("text")と呼ばれると、
# 第一引数には$objが入ってくる
sub twit{
my ($self, $text) = @_;
warn $self->{screen_name}.":".$text;
}
package main;
use strict;
use warnings;
# TwitterUser::new('TwitterUser', 'シャークこすげ', '9m')); とほぼ等価
my $kksg = TwitterUser->new('シャークこすげ', '9m');
# このとき kksg の実態は単なるハッシュリファレンス
# なので、デリファレンスも可能(推奨はできない)
warn join(',', keys %$kksg); # => "name,screen_name"
warn $kksg->{name}; # => "シャークこすげ"
# blessされたリファレンスは、関連づけられたpackageの関数を呼べるようになる
# TwitterUser::twit($kksg, "にゃーん"); とほぼ等価
$kksg->twit("にゃーん");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment