NAME
   Object::AutoAccessor - Accessor class by using AUTOLOAD

SYNOPSIS
     use Object::AutoAccessor;

     my $obj = Object::AutoAccessor->new();

     # setter methods
     $obj->foo('bar');
     $obj->set_foo('bar');
     $obj->param(foo => 'bar');

     # getter methods
     $obj->foo();
     $obj->get_foo();
     $obj->param('foo');

     # set/get array
     $obj->array([qw(foo bar)]);
     $obj->push(array => 'baz');
     my $baz = $obj->pop('array');
     my $foobar = $obj->join(',', 'array'); # got 'foo,bar'

     # set/get hash
     $obj->hash(+{ foo => 'fooval', bar => 'barval' });
     my $hashref = $obj->hash;
     my @keys = $obj->keys('hash');
     my @values = $obj->values('hash');
     my ($key, $val) = $obj->each('hash');

     # set/get coderef
     $obj->code(sub { print "CODEREF\n" });
     my $code = $obj->code;
     $code->();

     # set/get globref
     $obj->glob(\*STDOUT);
     my $glob = $obj->glob;
     print $glob "Hello\n";

     # is_hashref/arrayref/coderef/globref/scalar
     $obj->is_hashref('hash');
     $obj->is_arrayref('array');
     $obj->is_coderef('code');
     $obj->is_globref('glob');
     $obj->is_scalar('foo');

     # $obj->param() is compatible with HTML::Template->param()
     my @keywords = $obj->param();
     my $val = $obj->param('hash');
     $obj->param(key => 'val');

DESCRIPTION
   Object::AutoAccessor is a Accessor class to get/set values by AUTOLOADed
   method automatically, and also can use various methods of the same name
   as built-in functions such as push() , pop() , each() , join() ,
   length() , sprintf() and so on. Moreover, param() is compatible with
   "HTML::Template" module, so you can use Object::AutoAccessor object for
   "HTML::Template"'s "associate" option.

METHODS
   new ( [ OPTIONS ] )
       Create a new Object::AutoAccessor object. Then you can use several
       options to control object's behavior.

       * autoload
           If set to 0, the object cannot use the
           AUTOLOADed-accessor-method such as foo() , set_foo() and
           get_foo() but param() . Defaults to 1.

       * bindstyle
           If set to 'sql', behavior of bind() method changes into
           SQL-style-quoting. Defaults to 'normal' or undef.

   renew ( [ OPTIONS ] )
       Create a new Object::AutoAccessor object to remaining current
       options.

   new_child ( NAME, [ OPTIONS ] )
       Create a new Object::AutoAccessor object as child instance by
       renew() .

   child ( NAME, [ NAME, ... ] )
       An accessor method for child instance of Object::AutoAccessor
       object.

   children ( NAME, [ NAME, ... ] )
       an alias for child() .

   has_child ( NAME )
       If object has child instance then it return TRUE.

   KEY ( [ VALUE ] )
       This method provides an accessor that methodname is same as keyname
       by using AUTOLOAD mechanism.

         # setter methods
         $obj->foo('bar');
         $obj->set_foo('bar');
         $obj->param(foo => 'bar');

         # getter methods
         $obj->foo();
         $obj->get_foo();
         $obj->param('foo');

   param ( [ KEY => VALUE, ... ] )
       This method is compatible with param() method of HTML::Template
       module.

         # set value
         $obj->param(foo => 'bar');
         $obj->param(
           foo => 'bar',
           bar => [qw(1 2 3)],
           baz => { one => 1, two => 2, three => 3 }
         );

         # get value
         $obj->param('foo'); # got 'bar'

         # get list keys of parameters
         @keys = $obj->param();

   autoload ( BOOLEAN )
       This is the method to switch behavior of the
       AUTOLOADed-accessor-method. If set to 0, the object cannot use the
       AUTOLOADed-accessor-method such as foo() , set_foo() and get_foo()
       but param() .

         $obj->new_child('foo')->param(bar => 'baz');

         $obj->autoload(1);
         $baz = $obj->foo->bar; # OK

         $obj->autoload(0);
         $baz = $obj->child('foo')->param('bar'); # OK
         $baz = $obj->foo->bar;                   # NG

   bind ( KEY, BIND )
       This method provides a simple replacing mechanism that changes
       *placeholder* to bindings just looks like execute() method of DBI.

         $obj->sentence(q{What is the ? ? in ?\?});

         # $result is "What is the highest mountain in Japan?"
         $result = $obj->bind(sentence => qw(highest mountain Japan));

   bindstyle ( STYLE )
       If you want SQL-style-quoting, use bindstyle() and set value 'sql'.

         @binds = ('bar' "It's OK" '-0.123');
         $obj->bindstyle('sql');
         $obj->statement(q{SELECT * FROM foo WHERE BAR = ? AND BAZ = ? AND DECIMAL = ?});

         # $result is "SELECT * FROM foo WHERE BAR = 'bar' AND BAZ = 'It''s OK' AND DECIMAL = -0.123"
         $result = $obj->bind(statement => @binds);

   as_hashref ()
       As shown in name. :)

AUTHOR
   Copyright 2005-2006 Michiya Honda, <[email protected]> All rights reserved.

   This library is free software; you can redistribute it and/or modify it
   under the same terms as Perl itself.

SEE ALSO
   HTML::Template.