NAME
selfvars - Provide $self, @args, %opts and %hopts variables for OO
programs
SYNOPSIS
package MyClass;
### Import $self, @args, %opts and %hopts into your package:
use selfvars;
### Or name the variables explicitly:
# use selfvars -self => 'self', -args => 'args', -opts => 'opts', -hopts => 'hopts';
### Write the constructor as usual:
sub new {
return bless({}, shift);
}
### Use $self in place of $_[0]:
sub foo {
$self->{foo};
}
### Use @args in place of @_[1..$#_]:
sub bar {
my ($foo, $bar) = @args;
$self->{foo} = $foo;
$self->{bar} = $bar;
}
### Use %opts in place of %{$_[1]}:
sub baz {
$self->{x} = $opts{x};
$self->{y} = $opts{y};
}
### Use %hopts with $obj->yada( x => 1, y => 2 ) call syntax
sub yada {
$self->{x} = $hopts{x}
$self->{y} = $hopts{y}
}
DESCRIPTION
This moudles exports three special variables: $self, @args and %opts.
They are really just handy helpers to get rid of:
my $self = shift;
Behind the scenes, $self is simply tied to $_[0], @args to @_[1..$#_],
and %opts to "%{$_[1]}".
Currently, both $self and @args are read-only; this means you cannot
mutate them:
$self = 'foo'; # error
my $foo = shift @args; # error
This restriction may be lifted at a later version of this module, or
turned into a configurable option instead.
However, %opts is not read-only, and can be mutated freely:
$opts{x} = 'y'; # okay
delete $opts{x}; # also okay
INTERFACE
$self
Returns the current object.
@args
Returns the argument list.
%opts
Returns the first argument, which must be a hash reference, as a
hash.
%hopts
Returns the arguments list as a hash.
Choosing non-default names
You can choose alternative variable names with explicit import
arguments:
# Use $this and @vars instead of $self and @args, leaving %opts alone:
use selfvars -self => 'this', -args => 'vars', -opts;
# Use $this but leave @args and %opts alone:
use selfvars -self => 'this', -args, -opts;
# Use @vars but leave $self and %opts alone:
use selfvars -args => 'vars', -self, -opts;
You may also omit a variable name from the explicit import arguments:
# Import $self but not @args nor %opts:
use selfvars -self => 'self';
# Same as the above:
use selfvars -self;
# Import $self and %opts but not @args:
use selfvars -self, -opts;
DEPENDENCIES
None.
ACKNOWLEDGEMENTS
This module was inspired and based on Kang-min Liu (gugod)'s "self.pm".
As seen on #perl:
audreyt: selfvars.pm looks exactly like what I want self.pm to be in the beginning
audreyt: but I can't sort out the last BEGIN{} block like you did.
audreyt: that's a great job :D
SEE ALSO
self
AUTHORS
唐鳳
CC0 1.0 Universal
To the extent possible under law, 唐鳳 has waived all copyright and
related or neighboring rights to selfvars.
This work is published from Taiwan.