perl - universal operator overload

Posted by Todd Freed on Stack Overflow See other posts from Stack Overflow or by Todd Freed
Published on 2011-11-16T23:39:30Z Indexed on 2011/11/17 1:51 UTC
Read the original article Hit count: 192

I have an idea for perl, and I'm trying to figure out the best way to implement it.

The idea is to have new versions of every operator which consider the undefined value as the identity of that operation. For example:

$a = undef + 5;     # undef treated as 0, so $a = 5
$a = undef . "foo"; # undef treated as '', so $a = foo
$a = undef && 1;    # undef treated as false, $a = true

and so forth.

ideally, this would be in the language as a pragma, or something.

use operators::awesome;

However, I would be satisfied if I could implement this special logic myself, and then invoke it where needed:

use My::Operators;

The problem is that if I say "use overload" inside My::Operators only affects objects blessed into My::Operators.

So the question is: is there a way (with "use overoad" or otherwise) to do a "universal operator overload" - which would be called for all operations, not just operations on blessed scalars.

If not - who thinks this would be a great idea !? It would save me a TON of this kind of code

if($object && $object{value} && $object{value} == 15)

replace with

if($object{value} == 15)  ## the special "is-equal-to" operator

© Stack Overflow or respective owner

Related posts about perl

Related posts about overloading