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

📄 hv_refs.t

📁 source of perl for linux application,
💻 T
字号:
use strict;use warnings;BEGIN {    if ($ENV{'PERL_CORE'}){        chdir 't';        unshift @INC, '../lib';    }    use Config;    if (! $Config{'useithreads'}) {        print("1..0 # Skip: Perl not compiled with 'useithreads'\n");        exit(0);    }}use ExtUtils::testlib;sub ok {    my ($id, $ok, $name) = @_;    # You have to do it this way or VMS will get confused.    if ($ok) {        print("ok $id - $name\n");    } else {        print("not ok $id - $name\n");        printf("# Failed test at line %d\n", (caller)[2]);    }    return ($ok);}BEGIN {    $| = 1;    print("1..20\n");   ### Number of tests that will be run ###};use threads;use threads::shared;ok(1, 1, 'Loaded');### Start of Testing ###my $foo;share($foo);my %foo;share(%foo);$foo{"foo"} = \$foo;ok(2, !defined ${$foo{foo}}, "Check deref");$foo = "test";ok(3, ${$foo{foo}} eq "test", "Check deref after assign");threads->create(sub{${$foo{foo}} = "test2";})->join();ok(4, $foo eq "test2", "Check after assign in another thread");my $bar = delete($foo{foo});ok(5, $$bar eq "test2", "check delete");threads->create( sub {   my $test;   share($test);   $test = "thread3";   $foo{test} = \$test;   })->join();ok(6, ${$foo{test}} eq "thread3", "Check reference created in another thread");my $gg = $foo{test};$$gg = "test";ok(7, ${$foo{test}} eq "test", "Check reference");my $gg2 = delete($foo{test});ok(8, threads::shared::_id($$gg) == threads::shared::_id($$gg2),       sprintf("Check we get the same thing (%x vs %x)",       threads::shared::_id($$gg),threads::shared::_id($$gg2)));ok(9, $$gg eq $$gg2, "And check the values are the same");ok(10, keys %foo == 0, "And make sure we realy have deleted the values");{    my (%hash1, %hash2);    share(%hash1);    share(%hash2);    $hash1{hash} = \%hash2;    $hash2{"bar"} = "foo";    ok(11, $hash1{hash}->{bar} eq "foo", "Check hash references work");    threads->create(sub { $hash2{"bar2"} = "foo2"})->join();    ok(12, $hash1{hash}->{bar2} eq "foo2", "Check hash references work");    threads->create(sub { my (%hash3); share(%hash3); $hash2{hash} = \%hash3; $hash3{"thread"} = "yes"})->join();    ok(13, $hash1{hash}->{hash}->{thread} eq "yes", "Check hash created in another thread");}{    my $h = {a=>14};    my $r = \$h->{a};    share($r);    if ($] > 5.008) {        eval { lock($r); };        ok(14, !$@, "lock on helems ref: $@");        eval { lock($h->{a}); };        ok(15, !$@, "lock on helems: $@");    } else {        ok(14, 1, "skipped.  < 5.8");        ok(15, 1, "skipped.  < 5.8");    }}{    my $object : shared = &share({});    threads->create(sub {                     bless $object, 'test1';                 })->join;    ok(16, ref($object) eq 'test1', "blessing does work");    my %test = (object => $object);    ok(17, ref($test{object}) eq 'test1', "and some more work");    bless $object, 'test2';    ok(18, ref($test{object}) eq 'test2', "reblessing works!");}ok(19, is_shared($foo), "Check for sharing");ok(20, is_shared(%foo), "Check for sharing");# EOF

⌨️ 快捷键说明

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