⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tiehandle.t

📁 UNIX下perl实现代码
💻 T
字号:
#!./perlBEGIN {    chdir 't' if -d 't';    @INC = '../lib';}my @expect;my $data = "";my @data = ();my $test = 1;sub ok { print "not " unless shift; print "ok ",$test++,"\n"; }package Implement;BEGIN { *ok = \*main::ok }sub compare {    return unless @expect;    return ok(0) unless(@_ == @expect);    my $i;    for($i = 0 ; $i < @_ ; $i++) {	next if $_[$i] eq $expect[$i];	return ok(0);    }    ok(1);}sub TIEHANDLE {    compare(TIEHANDLE => @_);    my ($class,@val) = @_;    return bless \@val,$class;}sub PRINT {    compare(PRINT => @_);    1;}sub PRINTF {    compare(PRINTF => @_);    2;}sub READLINE {    compare(READLINE => @_);    wantarray ? @data : shift @data;}sub GETC {    compare(GETC => @_);    substr($data,0,1);}sub READ {    compare(READ => @_);    substr($_[1],$_[3] || 0) = substr($data,0,$_[2]);    3;}sub WRITE {    compare(WRITE => @_);    $data = substr($_[1],$_[3] || 0, $_[2]);    length($data);}sub CLOSE {    compare(CLOSE => @_);        5;}package main;use Symbol;print "1..33\n";my $fh = gensym;@expect = (TIEHANDLE => 'Implement');my $ob = tie *$fh,'Implement';ok(ref($ob) eq 'Implement');ok(tied(*$fh) == $ob);@expect = (PRINT => $ob,"some","text");$r = print $fh @expect[2,3];ok($r == 1);@expect = (PRINTF => $ob,"%s","text");$r = printf $fh @expect[2,3];ok($r == 2);$text = (@data = ("the line\n"))[0];@expect = (READLINE => $ob);$ln = <$fh>;ok($ln eq $text);@expect = ();@in = @data = qw(a line at a time);@line = <$fh>;@expect = @in;Implement::compare(@line);@expect = (GETC => $ob);$data = "abc";$ch = getc $fh;ok($ch eq "a");$buf = "xyz";@expect = (READ => $ob, $buf, 3);$data = "abc";$r = read $fh,$buf,3;ok($r == 3);ok($buf eq "abc");$buf = "xyzasd";@expect = (READ => $ob, $buf, 3,3);$data = "abc";$r = sysread $fh,$buf,3,3;ok($r == 3);ok($buf eq "xyzabc");$buf = "qwerty";@expect = (WRITE => $ob, $buf, 4,1);$data = "";$r = syswrite $fh,$buf,4,1;ok($r == 4);ok($data eq "wert");$buf = "qwerty";@expect = (WRITE => $ob, $buf, 4);$data = "";$r = syswrite $fh,$buf,4;ok($r == 4);ok($data eq "qwer");$buf = "qwerty";@expect = (WRITE => $ob, $buf, 6);$data = "";$r = syswrite $fh,$buf;ok($r == 6);ok($data eq "qwerty");@expect = (CLOSE => $ob);$r = close $fh;ok($r == 5);# Does aliasing work with tied FHs?*ALIAS = *$fh;@expect = (PRINT => $ob,"some","text");$r = print ALIAS @expect[2,3];ok($r == 1);{    use warnings;    # Special case of aliasing STDERR, which used    # to dump core when warnings were enabled    *STDERR = *$fh;    @expect = (PRINT => $ob,"some","text");    $r = print STDERR @expect[2,3];    ok($r == 1);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -