http://www.perlmonks.org?node_id=11121125


in reply to Re^6: Split tab-separated file into separate files, based on column name (tangent = open on demand => stream-like)
in thread Split tab-separated file into separate files, based on column name

Operator overloading is great, I'm not against it per se.

But it's a two-edged sword which should be handled with care.

Overloading an operator because it looks like another syntax is not a good idea ( here >> )

A good example for overloading are set operations, because the logic is "compatible".

I could also attempt to use the logical && family but short circuiting could sabotage it.

Bitwise ~ | & ^ etc. might be another option tho ... and the analogy between sets and bit vectors might help.

update

Found Set::Scalar which has a good set of overloaded operators.

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery

  • Comment on Re^7: Split tab-separated file into separate files, based on column name ( Operator overloading )
  • Select or Download Code

Replies are listed 'Best First'.
Re^8: Split tab-separated file into separate files, based on column name ( Operator overloading )
by Eily (Monsignor) on Aug 27, 2020 at 12:30 UTC
    A good example for overloading are set operations, because the logic is "compatible".
    • X * Y intersection
    • X + Y join
    • X - Y difference
    • - X complement

    I don't see how the logic is compatible, unary - as complement means X - Y is different from X + (-Y). And there's just no relation between * and + anymore. At least with + for concatenation (which I already don't like much), you can have STRING * 3 to be equivalent to STRING + STRING + STRING.

    And actually now that I think of it, the best operator to overload to append to a file is .=. With the dot you have both the append and string semantic, and the = makes it ok for the operation to have an effect on the left operand. And it makes chaining more consistent:
    file("path") .= "First string" . "Second string";

      > I don't see how the logic is compatible

      Set operations have a natural analogy to Boolean operations.

      And in mathematics and CS and and or are often replaced with * and + notations, especially in pre-LaTeX documents.

      That's because the truth tables are the same

      */AND 0 1 0 0 0 1 0 1 +/OR 0 1 0 0 1 1 1 2 (2 is true here)

      Arithmetic operators + - * / are also "close" in precedence, associativity and context (see perlop ) and the grouping rules are well known.

      Furthermore is comparison with < > => <= obvious here.

      Also the duplicity of == and eq for comparison comes handy (same "set object" or same "set elements")

      > STRING * 3 to be equivalent to STRING + STRING + STRING.

      not sure what you mean set elements are unique, if you refer to power-sets the cross operator x or power ** may be the better choice.

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      Wikisyntax for the Monastery