2012年11月9日金曜日

開発環境

『続・初めてのPerl 改訂版』(Randal L. Schwartz, brian d foy, Tom Phoenix 著、伊藤 直也田中 慎司吉川 英興 監訳、株式会社ロングテール/長尾 高弘 訳、オライリー・ジャパン、2006年、ISBN4-87311-305-9) の14章(オブジェクトに関する高度なトピックス), 14.7(練習問題)2を解いてみる。

その他参考書籍

2.

検索される順序がAUTOLOADはUNIVERSALより後だから。(UNIVERSALは全てのクラスの基底クラスみたいなもの。)

コード(TextWrangler)

sample.pl

#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.016;
binmode STDIN, ':utf8';
binmode STDOUT, ':utf8';

sub UNIVERSAL::debug{
  my $self = shift;
  print "object: ", $self, " timestamp: ", scalar localtime, " args: ", scalar(join ", ", @_  ), "\n";
}
{package MyDate;
  use Carp;
  sub new{
    my $self = shift;
    bless {}, $self;
  }
  sub DESTROY {}
  my %methods = ('date' => 3, 'month' => 4, 'year' => 5);
  sub AUTOLOAD{
    our $AUTOLOAD;
    (my $method = $AUTOLOAD) =~ s/.*:://s;
    if(! $methods{$method}){
      carp "$AUTOLOAD: Unknown.";
      return;
    }
    my $i = $methods{$method};
    return (localtime)[$i] + qw(0 0 0 0 1 1900 0 0 0)[$i];
  }
}

my $md = MyDate->new();

print "曜日: ", $md->wday, "\n"; # carpが呼び出される

print "今日の日付\n";
print $md->year , "年\n";
print $md->month, "月\n";
print $md->date, "日\n";
$md->debug();
$md->debug("a", "b", "c");

入出力結果(Terminal)

$ ./sample.pl
MyDate::wday: Unknown. at ./sample.pl line 35.
曜日: 
今日の日付
2012年
11月
9日
object: MyDate=HASH(0x7ff562029d58) timestamp: Fri Nov  9 17:01:35 2012 args: 
object: MyDate=HASH(0x7ff562029d58) timestamp: Fri Nov  9 17:01:35 2012 args: a, b, c
$

0 コメント:

コメントを投稿