Sub::Infix - create a fake infix operator
use Sub::Infix; # Operator needs to be defined (or imported) at compile time. BEGIN { *plus = infix { $_[0] + $_[1] } }; my $five = 2 |plus| 3;
Sub::Infix creates fake infix operators using overloading. It doesn't use source filters, or Devel::Declare, or any of that magic. (Though Devel::Declare isn't magic enough to define infix operators anyway; I know; I've tried.) It's pure Perl, has no non-core dependencies, and runs on Perl 5.6.
The price you pay for its simplicity is that you cannot define an operator that can be used like this:
my $five = 2 plus 3;
Instead, the operator needs to be wrapped with real Perl operators in one of three ways:
my $five = 2 |plus| 3; my $five = 2 /plus/ 3; my $five = 2 <<plus>> 3;
The advantage of this is that it gives you three different levels of operator precedence.
You can also call the function a slightly less weird way:
my $five = plus->(2, 3);
2 |plus| 3 is parsed by perl as: 2 | ( &plus() | 3 ).
2 |plus| 3
2 | ( &plus() | 3 )
&plus() returns an object that overloads the | operator; let's call that $obj.
&plus()
|
$obj
The overloaded $obj | 3 operation stashes 3 inside $obj noting that the number is the right operand, and returns $obj.
$obj | 3
3
Then 2 | $obj is evaluated, stashing 2 inside $obj as the left operand. At this point, the object notices that it has both operands, and calls the coderef from the definition of the operator, passing it both operands.
2 | $obj
2
Please report any bugs to http://rt.cpan.org/Dist/Display.html?Queue=Sub-Infix.
http://code.activestate.com/recipes/384122-infix-operators/.
Toby Inkster <tobyink@cpan.org>.
This software is copyright (c) 2013-2014 by Toby Inkster.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
To install Sub::Infix, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Sub::Infix
CPAN shell
perl -MCPAN -e shell install Sub::Infix
For more information on module installation, please visit the detailed CPAN module installation guide.