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