無駄なことをして遊ぼうat PHP無駄なことをして遊ぼう - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト2:名無しさん@お腹いっぱい。 01/05/31 16:42 /ItWxlxM.net # ostream.pm package ostream; use base Exporter; use Carp; use strict; use overload '<<' => \&print; our @EXPORT = qw(cout endl); use constant cout => bless {}; use constant endl => "\n"; sub print{ my $self = shift; my $arg = shift; shift and croak "syntax error"; CORE::print($arg); return $self; } __END__ 3:名無しさん@お腹いっぱい。 01/05/31 20:58 .net #ありゃ…ウケなかったか。 #まあ良いや一人で遊ぼう。 package IO::Stream; use Carp; use base 'Exporter'; @EXPORT = qw(endl $cout $cin setw); use strict; use overload '<<'=> \&output, '>>'=> \&input, '""'=> sub { ref $_[0] || $_[0] }, fallback=> 1, ; use vars qw/$cout $cin/; use constant endl => "\n"; $cout = IO::Stream->cout(); $cin = IO::Stream->cin(); sub new { return bless { type => shift }, ref $_[0] || $_[0]; } sub cin { return bless { type => 'istream' }, ref $_[0] || $_[0]; } sub cout{ return bless { type => 'ostream' }, ref $_[0] || $_[0]; } sub input{ my $self = shift; ($_[1] or index($self->{type}, 'i')) and croak "syntax error"; if(ref $_[0]){ $self->{bufsize} = ${ shift() }; }else{ if($self->{bufsize}){ $_[0] = substr scalar(<STDIN>), 0, $self->{bufsize}; }else{ $_[0] = <STDIN>; } } return $self; } sub setw{ my $len = shift; return \$len; } sub output{ my $self = shift; my $arg = shift; ($_[0] or index($self->{type}, 'o')) and croak "syntax error"; print($arg); return $self; } 1; # new周辺が見苦しいが # 纏めようとすると何故かoverloadがうまく働かないことがあるんだよなぁ…。 # 何でだろ。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch