#!/usr/local/bin/perl
sub
TIESCALAR {
my
$type
=
shift
;
my
%args
=
@_
;
my
$self
={} ;
if
(
defined
$args
{enum}) {
map
{
$self
->{enum}{
$_
} = 1;} @{
$args
{enum}} ;
}
else
{
croak
ref
(
$self
),
" error: no enum values defined when calling init"
;
}
$self
->{
default
} =
$args
{
default
};
$self
->{name} =
$args
{name};
bless
$self
,
$type
;
}
sub
STORE {
my
(
$self
,
$value
) =
@_
;
croak
"cannot set "
,
ref
(
$self
),
" item to $value. Expected "
,
join
(
' '
,
keys
%{
$self
->{enum}})
unless
defined
$self
->{enum}{
$value
} ;
$self
->{value} =
$value
;
return
$value
;
}
sub
FETCH {
my
$self
=
shift
;
return
defined
$self
->{value} ?
$self
->{value} :
$self
->{
default
} ;
}
1;