Skip to Content
Perl Hacks
book

Perl Hacks

by Chromatic, Damian Conway, Curtis Ovid Poe, Curtis (Ovid) Poe
May 2006
Beginner
298 pages
6h 51m
English
O'Reilly Media, Inc.
Content preview from Perl Hacks

Hack #47. Autodeclare Method Arguments

You know who you are. Stop repeating your $self.

Perl's object orientation is very flexible, in part because of its simplicity and minimalism. At times that's valuable: it allows hackers to build complex object systems from a few small features. The rest of the time it can be painful to do simple things.

Though not everyone always calls the invocant in methods $self, everyone has to declare and manage the invocant and other arguments. That's a bit of a drag—but it's fixable. Sure, you could use a full-blown source filter [Hack #94] to remove the need to shift off $self and process the rest of your argument list, but that's an unnecessarily large hammer to swing at such a small annoyance. There's another way.

The Hack

Solving this problem without source filters requires three ideas. First, there must be some way to mark a subroutine as a method, because not all subroutines are methods. Second, this should be compatible with strict, for good programming practices. Third, there should be some way to add the proper operations to populate $self and the other arguments.

The first is easy: how about a subroutine attribute [Hack #45] called Method? The third is also possible with a little bit of B::Deparse [Hack #56] and eval magic. The second is trickier....

A surprisingly short module can do all of this:

package Attribute::Method; use strict; use warnings; use B::Deparse; use Attribute::Handlers; my $deparse = B::Deparse->new( ); sub import { my ( $class, ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

Perl Debugged

Perl Debugged

Peter Scott, Ed Wright
Perl 6 Deep Dive

Perl 6 Deep Dive

Andrew Shitov
Learning Perl 6

Learning Perl 6

brian d foy
Perl by Example

Perl by Example

Ellie Quigley

Publisher Resources

ISBN: 0596526741Supplemental ContentErrata Page