The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Class::Args - Write and Call methods in your style.

SYNOPSIS

  package Some::Module;
  use Class::Args;
  
  # constructor
  sub new { bless {},shift };
  
  sub hoge {
        my ($self, $arg1, $arg2) = args(@_);
        
        # You can call other functions with $self.
        # Moreover, you can use $self as hash reference even 
        # this function was called in non object-oriented style.
        if($self->{_cache}){
                $rv = $self->{_cache}; # use cache
        }
        else{
                $rv = $self->other_function($arg1, $arg2);
                $self->{_cache} = $rv; # store cache
        }
        
        return $rv;
  }
  
  # in your script
  
  use Some::Module;
  
  my $obj = new Some::Module;
  print $obj->hoge('foo', 'bar'); # ok
  
  print Some::Module::hoge('foo', 'bar'); # ok
  # same as 
  print Some::Module->hoge('foo', 'bar'); # ok
  
  

DESCRIPTION

There's more than one way to do it!

 There are object oriented style and procedural style in this world.
But if you are using Class::Args, you can write methods in your favorite style
and users can call it in their favorite style. 

EXPORT

 Function "args" was imported by default.
B<If you don't want to import it>, write as below:


 use Class::Args();

and in function write as below:

  sub hoge {
        my ($self, $arg1, $arg2) = Class::Args::args(@_);
        ...
  }


 Instead of writing "Class::Args::args(@_)", you can write "Class::Args::a(@_)".
I don't like to write long chars.
This is why I named this module not "Class::Argument" but "Class::Args".

FUNCTIONS

args();

  my ($self, $arg1, $arg2) = args(@_);
  # or 
  my ($self, @args) = args(@_);
 
 Adjust function arguments.
Always function receives blessed hash reference ($self) as first argument.
Class::Args creates and supplies it if first argument is not $self.
Auto-created $self is cached so three calling styles as below are equal.
They share same $self.


  Some::Module::func('foo', 'bar');
  Some::Module->func('foo', 'bar');
  func('foo', 'bar'); # if func() was imported.

Of course, $self will be different if function was called in object oriented style.

  $obj1->func('foo', 'bar');
  $obj2->func('foo', 'bar');


 Notice that auto-created $self is not initialized.
It is created as an empty blessed hash reference.

a

Alias of "args".

SEE ALSO

TO DO

 I will make option which create object ( do "new Some::Module" ) and set it in
auto-created $self instead empty hash reference.

AUTHOR

Kagurazaka Mahito , < mahito@cpan.org >

COPYRIGHT AND LICENSE

Copyright (C) 2005 by Kagurazaka Mahito

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.6 or, at your option, any later version of Perl 5 you may have available.