---
name: "Sub::Infix"
section: "3pm"
platform: "linux"
package: "libsub-infix-perl"
version: "0.004-4"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Sub::Infix"
---

# Sub::Infix(3pm)

create a fake infix operator

## NAME

Sub::Infix - create a fake infix operator

## SYNOPSIS

```
   use Sub::Infix;

   # Operator needs to be defined (or imported) at compile time.
   BEGIN { *plus = infix { $_[0] + $_[1] } };

   my $five = 2 |plus| 3;
```

## DESCRIPTION

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);
```

### How does it work?

`"2 |plus| 3"` is parsed by perl as: `"2 | ( &plus() | 3 )"`.

`&plus()` returns an object that overloads the `"|"` operator; let's call that `$obj`.

The overloaded `"$obj | 3"` operation stashes `3` inside `$obj` noting that the number is the right operand, and returns `$obj`.

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.

## BUGS

Please report any bugs to \<http://rt.cpan.org/Dist/Display.html?Queue=Sub-Infix\>.

## SEE ALSO

\<http://code.activestate.com/recipes/384122-infix-operators/\>.

## AUTHOR

Toby Inkster \<tobyink@cpan.org\>.

## COPYRIGHT AND LICENCE

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.

## DISCLAIMER OF WARRANTIES

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.
