GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Method::Signatures::Simple(3) User Contributed Perl Documentation Method::Signatures::Simple(3)

Method::Signatures::Simple - Basic method declarations with signatures, without source filters

version 1.07

    # -- a basic class -- #
    package User;
    use Method::Signatures::Simple;

    method new ($class: $name, $email) {
        my $user = {
            id    => new_id(42),
            name  => $name,
            email => $email,
        };
        bless $user, $class;
    }

    func new_id ($seed) {
        state $id = $seed;
        $id++;
    }

    method name  { $self->{name};  }
    method email { $self->{email}; }
    1;


    # -- other features -- #
    # attributes
    method foo : lvalue { $self->{foo} }

    # change invocant name
    use Method::Signatures::Simple invocant => '$this';
    method foo ($bar) { $this->bar($bar) }
    method bar ($class: $bar) { $class->baz($bar) }

    # use a different function keyword
    use Method::Signatures::Simple function_keyword => 'fun';
    fun triple ($num) { 3 * $num }

    # use a different method keyword
    use Method::Signatures::Simple method_keyword => 'action';
    action foo { $self->bar }

This module provides basic "method" and "func" keywords with simple signatures. It's intentionally simple, and is supposed to be a stepping stone for its bigger brothers MooseX::Method::Signatures and Method::Signatures. It only has a small benefit over regular subs, so if you want more features, look at those modules. But if you're looking for a small amount of syntactic sugar, this might just be enough.

  • invocant

    The "method" keyword automatically injects the annoying "my $self = shift;" for you. You can rename the invocant with the first argument, followed by a colon:

        method ($this:) {}
        method ($this: $that) {}
        

    The "func" keyword doesn't inject an invocant, but does do the signature processing below:

        func ($that) {}
        
  • signature

    The signature "($sig)" is transformed into "my ($sig) = \@_;". That way, we mimic perl's usual argument handling.

        method foo ($bar, $baz, %opts) {
        func xyzzy ($plugh, @zorkmid) {
    
        # becomes
    
        sub foo {
            my $self = shift;
            my ($bar, $baz, %opts) = @_;
    
        sub xyzzy {
            my ($plugh, @zorkmid) = @_;
        

Since this module subclasses Devel::Declare::MethodInstaller::Simple, you can change the keywords and the default invocant with import arguments. These changes affect the current scope.
  • change the invocant name

        use Method::Signatures::Simple invocant => '$this';
        method x { $this->{x} }
        method y { $this->{y} }
    
        # and this of course still works:
        method z ($self:) { $self->{z} }
        
  • change the keywords

    You can install a different keyword (instead of the default 'method' and 'func'), by passing names to the "use" line:

        use Method::Signatures::Simple method_keyword   => 'action',
                                       function_keyword => 'thing';
    
        action foo ($some, $args) { ... }
        thing bar ($whatever) { ... }
        

    One benefit of this is that you can use this module together with e.g. MooseX::Declare:

        # untested
        use MooseX::Declare;
    
        class Foo {
            use Method::Signatures::Simple method_keyword => 'routine';
            method x (Int $x) { ... }    # from MooseX::Method::Signatures
            routine y ($y) { ... }       # from this module
        }
        

    If you specify neither "method_keyword" nor "function_keyword", then we default to injecting "method" and "func". If you only specify one of these options, then we only inject that one keyword into your scope.

    Examples:

        # injects 'method' and 'func'
        use Method::Signatures::Simple;
    
        # only injects 'action'
        use Method::Signatures::Simple method_keyword => 'action';
    
        # only injects 'procedure'
        use Method::Signatures::Simple function_keyword => 'procedure';
    
        # injects 'action' and 'function'
        use Method::Signatures::Simple method_keyword   => 'action',
                                       function_keyword => 'function';
        
  • install several keywords

    You're not limited to a single "use" line, so you can install several keywords with the same semantics as 'method' into the current scope:

        use Method::Signatures::Simple; # provides 'method' and 'func'
        use Method::Signatures::Simple method_keyword => 'action';
    
        method x { ... }
        func y { ... }
        action z { ... }
        

Rhesa Rozendaal, "<rhesa at cpan.org>"

Please report any bugs or feature requests to "bug-method-signatures-simple at rt.cpan.org", or through the web interface at <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Method-Signatures-Simple>. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

You can find documentation for this module with the perldoc command.

    perldoc Method::Signatures::Simple

You can also look for information at:

  • RT: CPAN's request tracker

    <http://rt.cpan.org/NoAuth/Bugs.html?Dist=Method-Signatures-Simple>

  • AnnoCPAN: Annotated CPAN documentation

    <http://annocpan.org/dist/Method-Signatures-Simple>

  • CPAN Ratings

    <http://cpanratings.perl.org/d/Method-Signatures-Simple>

  • Search CPAN

    <http://search.cpan.org/dist/Method-Signatures-Simple>

  • MSTROUT

    For writing Devel::Declare and providing the core concepts.

  • MSCHWERN

    For writing Method::Signatures and publishing about it. This is what got my attention.

  • FLORA

    For helping me abstracting the Devel::Declare bits and suggesting improvements.

  • CHIPS

    For suggesting we add a 'func' keyword.

Devel::Declare, Method::Signatures, MooseX::Method::Signatures.

Copyright 2011 Rhesa Rozendaal, all rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

2013-01-20 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.