NAME
    Tie::Array::Lazy - Lazy -- but mutable -- arrays.

VERSION
    $Id: README,v 0.1 2007/05/26 17:55:24 dankogai Exp $

SYNOPSIS
      use Tie::Array::Lazy;
      # 0..Inf
      tie my @a, 'Tie::Array::Lazy', [], sub{ $_[0]->index };
      print @a[0..9];      # 0123456789
      $a[1] = 'one';
      print @a[0..9];      # 0one23456789
      print "$_\n" for @a; # prints forever

DESCRIPTION
    Tie::Array::Lazy implements a *lazy array*, an array that generates the
    element on demand. It is a lot like a *lazy list* but unlike lazy lists
    seen in many functional languages like Haskell, lazy arrays are mutable
    so you can assign values to their elements.

    The example below explains how it works.

      tie my @a, 'Tie::Array::Lazy', [3,2,1,0], sub{ 1 };
      my @r = splice @a, 1, 2, qw/two one/
      # @r is (2,1);     tied(@a)->array is [3,'two','one',0];
      pop @a;   # 0;     tied(@a)->array is [3,'two','one'];
      shift @a; # 3;     tied(@a)->array is ['two','one'];
      shift @a; # 'two'; tied(@a)->array is ['one'];
      pop @a;   # 'one;  tied(@a)->array is [];
      pop @a;   # 1;     tied(@a)->array is [];
      @a[3] = 3 #        tied(@a)->array is [1,1,1,3];

    You can think *lazy arrays* as arrays that auto-fills.

EXPORT
    None.

FUNCTIONS
  tie @array, 'Tie::Array::Lazy', *arrayref*, *coderef*
    makes @array a lazy array with its initial state with *arrayref* and
    element generator code with *coderef*. Here is an exmaple;

    The *coderef* is a code reference which $_[0] is the Tie::Array::Lazy
    object itself (tied(@array)) and $_[1] is the index.

    In addition to methods that Tie::Array provides, the object has methods
    below:

    array
      The reference to the internal array which stores values either
      generated or assigned.

        # Fibonacci array
        tie my @a, 'Tie::Array::Lazy', 
            [1, 1], 
            sub{ $_[0]->array->[-2] + $_[0]->array->[-1] }

    index
      Shorthand for "scalar @{ $self->array }".

        # 0..Inf
        tie my @a, 'Tie::Array::Lazy', [], sub{ $_[0]->index };

    maker
      The reference to the code reference to generate the value needed.
      Whenever the value is needed, Tie::Array::Lazy invokes the code below;

        $self->maker($self, $index);

  Using Tie::Array::Lazy as a base class
    Like Tie::Array, you can use this module as a base class. See
    Tie::Array::Lazier for details.

AUTHOR
    Dan Kogai, "<dankogai at dan.co.jp>"

BUGS
    Please report any bugs or feature requests to "bug-tie-array-lazy at
    rt.cpan.org", or through the web interface at
    <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Tie-Array-Lazy>. I will
    be notified, and then you'll automatically be notified of progress on
    your bug as I make changes.

SUPPORT
    You can find documentation for this module with the perldoc command.

        perldoc Tie::Array::Lazy

    You can also look for information at:

    *   AnnoCPAN: Annotated CPAN documentation

        <http://annocpan.org/dist/Tie-Array-Lazy>

    *   CPAN Ratings

        <http://cpanratings.perl.org/d/Tie-Array-Lazy>

    *   RT: CPAN's request tracker

        <http://rt.cpan.org/NoAuth/Bugs.html?Dist=Tie-Array-Lazy>

    *   Search CPAN

        <http://search.cpan.org/dist/Tie-Array-Lazy>

ACKNOWLEDGEMENTS
    Nick Ing-Simmons for Tie::Array

    Matsumoto Yukihiro (Matz) for teasing me into hacking this module.

COPYRIGHT & LICENSE
    Copyright 2007 Dan Kogai, all rights reserved.

    This program is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself.

