Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
Mojo::Base(3)	      User Contributed Perl Documentation	 Mojo::Base(3)

       Mojo::Base - Minimal base class for Mojo	projects

	 package Cat;
	 use Mojo::Base	-base;

	 has name => 'Nyan';
	 has ['age', 'weight'] => 4;

	 package Tiger;
	 use Mojo::Base	'Cat';

	 has friend  =>	sub { Cat->new };
	 has stripes =>	42;

	 package main;
	 use Mojo::Base	-strict;

	 my $mew = Cat->new(name => 'Longcat');
	 say $mew->age;
	 say $mew->age(3)->weight(5)->age;

	 my $rawr = Tiger->new(stripes => 38, weight =>	250);
	 say $rawr->tap(sub { $_->friend->name('Tacgnol') })->weight;

       Mojo::Base is a simple base class for Mojo projects with	fluent

	 # Automatically enables "strict", "warnings", "utf8" and Perl 5.10 features
	 use Mojo::Base	-strict;
	 use Mojo::Base	-base;
	 use Mojo::Base	'SomeBaseClass';

       All three forms save a lot of typing.

	 # use Mojo::Base -strict;
	 use strict;
	 use warnings;
	 use utf8;
	 use feature ':5.10';
	 use IO::Handle	();

	 # use Mojo::Base -base;
	 use strict;
	 use warnings;
	 use utf8;
	 use feature ':5.10';
	 use IO::Handle	();
	 use Mojo::Base;
	 push @ISA, 'Mojo::Base';
	 sub has { Mojo::Base::attr(__PACKAGE__, @_) }

	 # use Mojo::Base 'SomeBaseClass';
	 use strict;
	 use warnings;
	 use utf8;
	 use feature ':5.10';
	 use IO::Handle	();
	 require SomeBaseClass;
	 push @ISA, 'SomeBaseClass';
	 use Mojo::Base;
	 sub has { Mojo::Base::attr(__PACKAGE__, @_) }

       Mojo::Base implements the following functions, which can	be imported
       with the	"-base"	flag or	by setting a base class.

	 has 'name';
	 has ['name1', 'name2',	'name3'];
	 has name => 'foo';
	 has name => sub {...};
	 has ['name1', 'name2',	'name3'] => 'foo';
	 has ['name1', 'name2',	'name3'] => sub	{...};

       Create attributes for hash-based	objects, just like the "attr" method.

       Mojo::Base implements the following methods.

	 SubClass->attr(['name1', 'name2', 'name3']);
	 SubClass->attr(name =>	'foo');
	 SubClass->attr(name =>	sub {...});
	 SubClass->attr(['name1', 'name2', 'name3'] => 'foo');
	 SubClass->attr(['name1', 'name2', 'name3'] => sub {...});

       Create attribute	accessors for hash-based objects, an array reference
       can be used to create more than one at a	time. Pass an optional second
       argument	to set a default value,	it should be a constant	or a callback.
       The callback will be executed at	accessor read time if there's no set
       value, and gets passed the current instance of the object as first
       argument. Accessors can be chained, that	means they return their
       invocant	when they are called with an argument.

	 my $object = SubClass->new;
	 my $object = SubClass->new(name => 'value');
	 my $object = SubClass->new({name => 'value'});

       This base class provides	a basic	constructor for	hash-based objects.
       You can pass it either a	hash or	a hash reference with attribute

	 $object = $object->tap(sub {...});
	 $object = $object->tap('some_method');
	 $object = $object->tap('some_method', @args);

       Tap into	a method chain to perform operations on	an object within the
       chain (also known as a K	combinator or Kestrel).	The object will	be the
       first argument passed to	the callback, and is also available as $_. The
       callback's return value will be ignored;	instead, the object (the
       callback's first	argument) will be the return value. In this way,
       arbitrary code can be used within (i.e.,	spliced	or tapped into)	a
       chained set of object method calls.

	 # Longer version
	 $object = $object->tap(sub { $_->some_method(@args) });

	 # Inject side effects into a method chain
	 $object->foo('A')->tap(sub { say $_->foo })->foo('B');

       Mojolicious, Mojolicious::Guides, <>.

perl v5.24.1			  2017-01-12			 Mojo::Base(3)


Want to link to this manual page? Use this URL:

home | help