Mojo::DynamicMethods

Section: User Contributed Perl Documentation (3pm)
Updated: 2022-12-22
Index Return to Main Contents
 

NAME

Mojo::DynamicMethods - Fast dynamic method dispatch  

SYNOPSIS

  package MyClass;
  use Mojo::Base -base, -signatures;

  use Mojo::DynamicMethods -dispatch;

  sub BUILD_DYNAMIC ($class, $method, $dyn_methods) {
    return sub {...};
  }

  sub add_helper ($self, $name, $cb) {
    Mojo::DynamicMethods::register 'MyClass', $self, $name, $cb;
  }

  package main;

  # Generate methods dynamically (and hide them from "$obj->can(...)")
  my $obj = MyClass->new;
  $obj->add_helper(foo => sub { warn 'Hello Helper!' });
  $obj->foo;

 

DESCRIPTION

Mojo::DynamicMethods provides dynamic method dispatch for per-object helper methods without requiring use of "AUTOLOAD".

To opt your class into dynamic dispatch simply pass the "-dispatch" flag.

  use Mojo::DynamicMethods -dispatch;

And then implement a "BUILD_DYNAMIC" method in your class, making sure that the key you use to lookup methods in $dyn_methods is the same thing you pass as $ref to ``register''.

  sub BUILD_DYNAMIC ($class, $method, $dyn_methods) {
    return sub ($self, @args) {
      my $dynamic = $dyn_methods->{$self}{$method};
      return $self->$dynamic(@args) if $dynamic;
      my $package = ref $self;
      croak qq{Can't locate object method "$method" via package "$package"};
    };
  }

Note that this module will summon Cthulhu, use it at your own risk!  

FUNCTIONS

Mojo::DynamicMethods implements the following functions.  

register

  Mojo::DynamicMethods::register $class, $ref, $name, $cb;

Registers the method $name as eligible for dynamic dispatch for $class, and sets $cb to be looked up for $name by reference $ref in a dynamic method constructed by "BUILD_DYNAMIC".  

SEE ALSO

Mojolicious, Mojolicious::Guides, <https://mojolicious.org>.


 

Index

NAME
SYNOPSIS
DESCRIPTION
FUNCTIONS
register
SEE ALSO

This document was created by man2html, using the manual pages.
Time: 07:30:32 GMT, April 20, 2024