開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの機能制限無料版、light版)
- Script言語:Perl
『続・初めての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 コメント:
コメントを投稿