#!/home/jmc/bin/perl =head1 NAME =head1 SYNOPSIS =head1 DESCRIPTION =head1 BUGS =head1 SEE ALSO =head1 AUTHOR John Chambers =cut package abc; use Carp; package tune; #require Exporter; ##@ISA = qw(Exporter); @EXPORT = qw(new,C,K,L,M,O,T,X,wrapup); #@EXPORT_OK = qw(); my %fields = ( K => 'C', L => '1/4', M => 'C', X => '0', ); sub new { my $that = shift; my $class = ref($that) || $that; my $self = {_permitted => \%fields, %fields}; bless $self, $class; print "tune::new(@_) called.\n" if $main::D; $self{X} = shift; return $self; } sub AUTOLOAD { my $self = shift; my $type = ref($self) || &croak("$self is not an object"); my $name = $AUTOLOAD; $name =~ s/.*://; &croak("Can't access \"$name\" field in object of class $type") unless (exists $self->{_permitted}->{$name}); if (@_) { return $self->{$name} = shift; } else { return $self->{name}; } } sub DESTROY { print "tune::DESTROY called.\n" if $main::D; } sub C {my($obj,$val) = @_;$obj{C} = $val} sub K {my($obj,$val) = @_;$obj{K} = $val} sub L {my($obj,$val) = @_;$obj{L} = $val} sub M {my($obj,$val) = @_;$obj{M} = $val} sub O {my($obj,$val) = @_;$obj{O} = $val} sub T {my($obj,$val) = @_;$obj{T} = $val} sub X {my($obj,$val) = @_;$obj{X} = $val} sub wrapup { print "tune::wrapup called for X:",$obj{"X"},"T:",$obj{"T"},".\n" if $main::D; } 1;