Skip to content
Find file
Fetching contributors…
Cannot retrieve contributors at this time
134 lines (95 sloc) 3.61 KB
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 four special variables: $self, @args, %opts and
%hopts.
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..$#_],
%opts to "%{$_[1]}", and "%hopts%" to "%{{@_[1..$#_]}}".
Currently, $self, @args and %hopts are read-only; this means you cannot
mutate them:
$self = 'foo'; # error
my $foo = shift @args; # error
$hopts{x} = 'y'; # error
delete $hopts{x}; # 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 and %hopts alone:
use selfvars -self => 'this', -args => 'vars', -opts, -hopts;
# Use $this but leave @args, %opts and %hopts alone:
use selfvars -self => 'this', -args, -opts, -hopts;
# Use @vars but leave $self, %opts and %hopts alone:
use selfvars -args => 'vars', -self, -opts, -hopts;
You may also omit one or more variable names from the explicit import
arguments:
# Import $self but not @args, %opts nor %hopts:
use selfvars -self => 'self';
# Same as the above:
use selfvars -self;
# Import $self and %opts but not @args nor %hopts:
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:
<gugod> audreyt: selfvars.pm looks exactly like what I want self.pm to be in the beginning
<gugod> audreyt: but I can't sort out the last BEGIN{} block like you did.
<gugod> audreyt: that's a great job :D
SEE ALSO
self
AUTHORS
唐鳳 <cpan@audreyt.org>
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.
<http://creativecommons.org/publicdomain/zero/1.0>
Jump to Line
Something went wrong with that request. Please try again.