# [wish list]: perl stuff

Michael Moore (mike@mail.datasys.net)
Sat, 10 Aug 1996 08:26:17 PDT

- Messages sorted by:[ date ][ thread ][ subject ][ author ]

    H. Peter Anvin wrote:

    > >
    > > Somewhat Perly.  The ability to reference '[a..b]' as if it were an
    > > inclusive list of all integers 'a' through 'b'.  Like...
    > >
    > >         if (foo in [5..8])
    > >
    > > Rather than...
    > >
    > >         if ((foo > 4) && (foo < 9))
    > >
    >
    > This is, by the way, hideously inefficient and would cause severe
    > server spam, since you are needlessly creating a list when you don't
    > need to.  Perl gets around this by having a pretty extensive
    > optimizer, but developing one for MOO would be a *lot* of work.

    Why does it have to create a list?  Why would it be a lot of work?
    Both syntaxes would basically do the same thing...but the
    'if (foo in [5..8])' one would be smaller in MOO code and probably
    would use fewer bytes when tokenized.  It wouldn't have to generate
    a list of {5, 6, 7, 8} to see if foo is in it...the bytecodes for
    this particular use of the 'in' operator would just have to generate
    a comparison similar to 'if ((foo >= 5) && (foo <= 8))'.

    The behavior of 'in' already changes, depending on whether it is
    in a normal expression, or in a for..endfor statement.  It wouldn't
    be as hard as you think to make [x..y] a valid operand for 'in' in
    a normal expression.  ATM it's not.

    If you really wanted to have fun, make something like this:

      ;[1..5] in [3..8]
      => [3..5]

    What we would then be implementing is a new datatype for ranges.

      ;typeof ([5..8])
      => RANGE

    But now that you mention it, it would be neat to be able to create
    a list by something like

      foo = {@[5..8]}

    which would return

      {5, 6, 7, 8};

    or even use object numbers, like

      if (foo in [#1..#90])

    or

      foo = {@[#1..#90]}

    It wouldn't be incredibly frequently used, but it would have
    a use.