1#!perl -w
2
3use strict;
4use Test qw(plan ok);
5use Data::Dump qw(dump);
6
7plan tests => 4;
8
9{
10    package MyTie;
11
12    sub TIE {
13	my $class = shift;
14	bless {}, $class;
15    }
16
17    use vars qw(*TIEHASH *TIEARRAY *TIESCALAR);
18    *TIEHASH = \&TIE;
19    *TIEARRAY = \&TIE;
20    *TIESCALAR = \&TIE;
21
22    sub FIRSTKEY {
23	return "a";
24    }
25
26    sub NEXTKEY {
27	my($self, $lastkey) = @_;
28	return if $lastkey eq "d";
29	return ++$lastkey;
30    }
31
32    sub FETCHSIZE {
33	return 4;
34    }
35
36    sub FETCH {
37	my($self, $key) = @_;
38	return "v$key" if defined $key;
39	return "v";
40    }
41}
42
43my(%hash, @array, $scalar);
44tie %hash, "MyTie";
45tie @array, "MyTie";
46tie $scalar, "MyTie";
47
48ok(nl(dump(\%hash)), <<EOT);
49{
50  # tied MyTie
51  a => "va",
52  b => "vb",
53  c => "vc",
54  d => "vd",
55}
56EOT
57
58ok(nl(dump(\@array)), <<EOT);
59[
60  # tied MyTie
61  "v0" .. "v3",
62]
63EOT
64
65ok(nl(dump($scalar)), <<EOT);
66"v"
67EOT
68
69ok(nl(dump($scalar, $scalar, $scalar)), <<EOT);
70("v", "v", "v")
71EOT
72
73sub nl { shift(@_) . "\n" }
74