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

📄 avhv.t

📁 UNIX下perl实现代码
💻 T
字号:
#!./perlBEGIN {    chdir 't' if -d 't';    @INC = '../lib';}require Tie::Array;package Tie::BasicArray;@ISA = 'Tie::Array';sub TIEARRAY  { bless [], $_[0] }sub STORE     { $_[0]->[$_[1]] = $_[2] }sub FETCH     { $_[0]->[$_[1]] }sub FETCHSIZE { scalar(@{$_[0]})} sub STORESIZE { $#{$_[0]} = $_[1]+1 } package main;print "1..28\n";$sch = {    'abc' => 1,    'def' => 2,    'jkl' => 3,};# basic normal array$a = [];$a->[0] = $sch;$a->{'abc'} = 'ABC';$a->{'def'} = 'DEF';$a->{'jkl'} = 'JKL';@keys = keys %$a;@values = values %$a;if ($#keys == 2 && $#values == 2) {print "ok 1\n";} else {print "not ok 1\n";}$i = 0;		# stop -w complaintswhile (($key,$value) = each %$a) {    if ($key eq $keys[$i] && $value eq $values[$i] && $key eq lc($value)) {	$key =~ y/a-z/A-Z/;	$i++ if $key eq $value;    }}if ($i == 3) {print "ok 2\n";} else {print "not ok 2\n";}# quick check with tied arraytie @fake, 'Tie::StdArray';$a = \@fake;$a->[0] = $sch;$a->{'abc'} = 'ABC';if ($a->{'abc'} eq 'ABC') {print "ok 3\n";} else {print "not ok 3\n";}# quick check with tied arraytie @fake, 'Tie::BasicArray';$a = \@fake;$a->[0] = $sch;$a->{'abc'} = 'ABC';if ($a->{'abc'} eq 'ABC') {print "ok 4\n";} else {print "not ok 4\n";}# quick check with tied array & tied hashrequire Tie::Hash;tie %fake, Tie::StdHash;%fake = %$sch;$a->[0] = \%fake;$a->{'abc'} = 'ABC';if ($a->{'abc'} eq 'ABC') {print "ok 5\n";} else {print "not ok 5\n";}# hash slicemy $slice = join('', 'x',@$a{'abc','def'},'x');print "not " if $slice ne 'xABCx';print "ok 6\n";# evaluation in scalar contextmy $avhv = [{}];print "not " if %$avhv;print "ok 7\n";push @$avhv, "a";print "not " if %$avhv;print "ok 8\n";$avhv = [];eval { $a = %$avhv };print "not " unless $@ and $@ =~ /^Can't coerce array into hash/;print "ok 9\n";$avhv = [{foo=>1, bar=>2}];print "not " unless %$avhv =~ m,^\d+/\d+,;print "ok 10\n";# check if defelem magic workssub f {    print "not " unless $_[0] eq 'a';    $_[0] = 'b';    print "ok 11\n";}$a = [{key => 1}, 'a'];f($a->{key});print "not " unless $a->[1] eq 'b';print "ok 12\n";# check if exists() is behaving properly$avhv = [{foo=>1,bar=>2,pants=>3}];print "not " if exists $avhv->{bar};print "ok 13\n";$avhv->{pants} = undef;print "not " unless exists $avhv->{pants};print "ok 14\n";print "not " if exists $avhv->{bar};print "ok 15\n";$avhv->{bar} = 10;print "not " unless exists $avhv->{bar} and $avhv->{bar} == 10;print "ok 16\n";$v = delete $avhv->{bar};print "not " unless $v == 10;print "ok 17\n";print "not " if exists $avhv->{bar};print "ok 18\n";$avhv->{foo} = 'xxx';$avhv->{bar} = 'yyy';$avhv->{pants} = 'zzz';@x = delete @{$avhv}{'foo','pants'};print "# @x\nnot " unless "@x" eq "xxx zzz";print "ok 19\n";print "not " unless "$avhv->{bar}" eq "yyy";print "ok 20\n";# hash assignment%$avhv = ();print "not " unless ref($avhv->[0]) eq 'HASH';print "ok 21\n";%hv = %$avhv;print "not " if grep defined, values %hv;print "ok 22\n";print "not " if grep ref, keys %hv;print "ok 23\n";%$avhv = (foo => 29, pants => 2, bar => 0);print "not " unless "@$avhv[1..3]" eq '29 0 2';print "ok 24\n";my $extra;my @extra;($extra, %$avhv) = ("moo", foo => 42, pants => 53, bar => "HIKE!");print "not " unless "@$avhv[1..3]" eq '42 HIKE! 53' and $extra eq 'moo';print "ok 25\n";%$avhv = ();(%$avhv, $extra) = (foo => 42, pants => 53, bar => "HIKE!");print "not " unless "@$avhv[1..3]" eq '42 HIKE! 53' and !defined $extra;print "ok 26\n";@extra = qw(whatever and stuff);%$avhv = ();(%$avhv, @extra) = (foo => 42, pants => 53, bar => "HIKE!");print "not " unless "@$avhv[1..3]" eq '42 HIKE! 53' and @extra == 0;print "ok 27\n";%$avhv = ();(@extra, %$avhv) = (foo => 42, pants => 53, bar => "HIKE!");print "not " unless ref $avhv->[0] eq 'HASH' and @extra == 6;print "ok 28\n";

⌨️ 快捷键说明

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