selfvars - Provide $self, @args, %opts and %hopts variables for OO programs
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} }
This module exports four special variables: $self, @args, %opts and %hopts.
$self
@args
%opts
%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..$#_]}}.
$_[0]
@_[1..$#_]
%{$_[1]}
%hopts%
%{{@_[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
Returns the current object.
Returns the argument list.
Returns the first argument, which must be a hash reference, as a hash.
Returns the arguments list as a hash.
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;
None.
This module was inspired and based on Kang-min Liu (gugod)'s self.pm.
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
self
唐鳳 <cpan@audreyt.org>
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
To install selfvars, copy and paste the appropriate command in to your terminal.
cpanm
cpanm selfvars
CPAN shell
perl -MCPAN -e shell install selfvars
For more information on module installation, please visit the detailed CPAN module installation guide.