1#!/usr/bin/env perl 2 3use strict; 4use warnings; 5 6use Tie::Hash; 7 8use lib qw{blib/arch blib/lib}; 9use Variable::Magic qw/wizard cast VMG_UVAR/; 10 11use Benchmark qw/cmpthese/; 12 13die 'Your perl does not support the nice uvar magic of 5.10.*' unless VMG_UVAR; 14 15tie my %t, 'Tie::StdHash'; 16$t{a} = 1; 17 18my $wiz = wizard fetch => sub { 0 }, 19 store => sub { 0 }, 20 exists => sub { 0 }, 21 delete => sub { 0 }; 22my %v; 23cast %v, $wiz; 24$v{a} = 2; 25 26print "Using Variable::Magic ", $Variable::Magic::VERSION, "\n"; 27 28print "Fetch:\n"; 29cmpthese -1, { 30 'tie' => sub { $t{a} }, 31 'v::m' => sub { $v{a} } 32}; 33 34print "Store:\n"; 35cmpthese -1, { 36 'tie' => sub { $t{a} = 2 }, 37 'v::m' => sub { $v{a} = 2 } 38}; 39 40print "Exists:\n"; 41cmpthese -1, { 42 'tie' => sub { exists $t{a} }, 43 'v::m' => sub { exists $v{a} } 44}; 45 46print "Delete/store:\n"; 47cmpthese -1, { 48 'tie' => sub { delete $t{a}; $t{a} = 3 }, 49 'v::m' => sub { delete $v{a}; $v{a} = 3 } 50}; 51