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