無駄なことをして遊ぼうat PHP
無駄なことをして遊ぼう - 暇つぶし2ch3:名無しさん@お腹いっぱい。
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がうまく働かないことがあるんだよなぁ…。
# 何でだろ。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch