GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
HOP::Stream(3) User Contributed Perl Documentation HOP::Stream(3)

HOP::Stream - "Higher Order Perl" streams

Version 0.03

This package is based on the Stream.pm code from the book "Higher Order Perl", by Mark Jason Dominus.

A stream is conceptually similar to a linked list. However, we may have an infinite stream. As infinite amounts of data are frequently taxing to the memory of most systems, the tail of the list may be a promise. A promise, in this context, is merely a promise that the code will compute the rest of the list if necessary. Thus, the rest of the list does not exist until actually needed.

The documentation here is not complete. See "Higher Order Perl" by Mark Dominus for a full explanation. Further, this is ALPHA code. Patches and suggestions welcome.

The following functions may be exported upon demand. ":all" may be specified if you wish everything exported.
  • cutsort
  • drop
  • filter
  • head
  • insert
  • iterator_to_stream
  • list_to_stream
  • append
  • merge
  • node
  • promise
  • show
  • tail
  • transform
  • upto
  • upfrom

 my $node = node( $head, $tail );

Returns a node for a stream.

The tail of the node may be a promise to compute the actual tail when needed.

  my $head = head( $node );

This function returns the head of a stream.

 my $tail = tail( $stream );

Returns the tail of a stream.

  if ( is_node($tail) ) {
     ...
  }

Returns true if the tail of a node is a node. Generally this function is used internally.

  if ( is_promise($tail) ) {
     ...
  }

Returns true if the tail of a node is a promise. Generally this function is used internally.

  my $promise = promise { ... };

A utility function with a code prototype ("sub promise(&);") allowing one to specify a coderef with curly braces and omit the "sub" keyword.

 show( $stream, [ $number_of_nodes ] );

This is a debugging function that will return a text representation of $number_of_nodes of the stream $stream.

Omitting the second argument will print all elements of the stream. This is not recommended for infinite streams (duh).

The elements of the stream will be separated by the current value of $".

  my $head = drop( $stream );

This is the "shift" function for streams. It returns the head of the stream and and modifies the stream in-place to be the tail of the stream.

  my $new_stream = transform { $_[0] * 2 } $old_stream;

This is the "map" function for streams. It returns a new stream.

  my $new_stream = filter { $_[0] % 2 } $old_stream;

This is the "grep" function for streams. It returns a new stream.

  my $merged_stream = merge( $stream1, $stream2 );

This function takes two streams assumed to be in sorted order and merges them into a new stream, also in sorted order.

  my $merged_stream = append( $stream1, $stream2 );

This function takes a list of streams and attaches them together head-to-tail into a new stream.

  my $stream = list_to_stream(@list);

Converts a list into a stream. The final item of "list" should be a promise or another stream. Thus, to generate the numbers one through ten, one could do this:

 my $stream = list_to_stream( 1 .. 9, node(10, undef) );
 # or
 my $stream = list_to_stream( 1 .. 9, node(10) );

  my $stream = iterator_to_stream($iterator);

Converts an iterator into a stream. An iterator is merely a code reference which, when called, keeps returning elements until there are no more elements, at which point it returns "undef".

  my $stream = upto($from_num, $to_num);

Given two numbers, $from_num and $to_num, returns an iterator which will return all of the numbers between $from_num and $to_num, inclusive.

  my $stream = upfrom($num);

Similar to "upto", this function returns a stream which will generate an infinite list of numbers starting from $num.

Mark Dominus, maintained by Curtis "Ovid" Poe, "<ovid@cpan.org>"

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

Many thanks to Mark Dominus and Elsevier, Inc. for allowing this work to be republished.

Code derived from the book "Higher-Order Perl" by Mark Dominus, published by Morgan Kaufmann Publishers, Copyright 2005 by Elsevier Inc.

All Software (code listings) presented in the book can be found on the companion website for the book (http://perl.plover.com/hop/) and is subject to the License agreements below.

You can download the latest versions of these modules at <http://github.com/Ovid/hop/>. Feel free to fork and make changes.

Please read the following agreement carefully before using this Software. This Software is licensed under the terms contained in this Software license agreement ("agreement"). By using this Software product, you, an individual, or entity including employees, agents and representatives ("you" or "your"), acknowledge that you have read this agreement, that you understand it, and that you agree to be bound by the terms and conditions of this agreement. Elsevier inc. ("Elsevier") expressly does not agree to license this Software product to you unless you assent to this agreement. If you do not agree with any of the following terms, do not use the Software.

YOUR USE OF THIS SOFTWARE IS AT YOUR OWN RISK. NEITHER ELSEVIER NOR ITS LICENSORS REPRESENT OR WARRANT THAT THE SOFTWARE PRODUCT WILL MEET YOUR REQUIREMENTS OR THAT ITS OPERATION WILL BE UNINTERRUPTED OR ERROR-FREE. WE EXCLUDE AND EXPRESSLY DISCLAIM ALL EXPRESS AND IMPLIED WARRANTIES NOT STATED HEREIN, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN ADDITION, NEITHER ELSEVIER NOR ITS LICENSORS MAKE ANY REPRESENTATIONS OR WARRANTIES, EITHER EXPRESS OR IMPLIED, REGARDING THE PERFORMANCE OF YOUR NETWORK OR COMPUTER SYSTEM WHEN USED IN CONJUNCTION WITH THE SOFTWARE PRODUCT. WE SHALL NOT BE LIABLE FOR ANY DAMAGE OR LOSS OF ANY KIND ARISING OUT OF OR RESULTING FROM YOUR POSSESSION OR USE OF THE SOFTWARE PRODUCT CAUSED BY ERRORS OR OMISSIONS, DATA LOSS OR CORRUPTION, ERRORS OR OMISSIONS IN THE PROPRIETARY MATERIAL, REGARDLESS OF WHETHER SUCH LIABILITY IS BASED IN TORT, CONTRACT OR OTHERWISE AND INCLUDING, BUT NOT LIMITED TO, ACTUAL, SPECIAL, INDIRECT, INCIDENTAL OR CONSEQUENTIAL DAMAGES. IF THE FOREGOING LIMITATION IS HELD TO BE UNENFORCEABLE, OUR MAXIMUM LIABILITY TO YOU SHALL NOT EXCEED THE AMOUNT OF THE PURCHASE PRICE PAID BY YOU FOR THE SOFTWARE PRODUCT. THE REMEDIES AVAILABLE TO YOU AGAINST US AND THE LICENSORS OF MATERIALS INCLUDED IN THE SOFTWARE PRODUCT ARE EXCLUSIVE.

YOU UNDERSTAND THAT ELSEVIER, ITS AFFILIATES, LICENSORS, SUPPLIERS AND AGENTS, MAKE NO WARRANTIES, EXPRESSED OR IMPLIED, WITH RESPECT TO THE SOFTWARE PRODUCT, INCLUDING, WITHOUT LIMITATION THE PROPRIETARY MATERIAL, AND SPECIFICALLY DISCLAIM ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

IN NO EVENT WILL ELSEVIER, ITS AFFILIATES, LICENSORS, SUPPLIERS OR AGENTS, BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, WITHOUT LIMITATION, ANY LOST PROFITS, LOST SAVINGS OR OTHER INCIDENTAL OR CONSEQUENTIAL DAMAGES, ARISING OUT OF YOUR USE OR INABILITY TO USE THE SOFTWARE PRODUCT REGARDLESS OF WHETHER SUCH DAMAGES ARE FORESEEABLE OR WHETHER SUCH DAMAGES ARE DEEMED TO RESULT FROM THE FAILURE OR INADEQUACY OF ANY EXCLUSIVE OR OTHER REMEDY.

This Software License Agreement is a legal agreement between the Author and any person or legal entity using or accepting any Software governed by this Agreement. The Software is available on the companion website (http://perl.plover.com/hop/) for the Book, Higher-Order Perl, which is published by Morgan Kaufmann Publishers. "The Software" is comprised of all code (fragments and pseudocode) presented in the book.

By installing, copying, or otherwise using the Software, you agree to be bound by the terms of this Agreement.

The parties agree as follows:

1 Grant of License
We grant you a nonexclusive license to use the Software for any purpose, commercial or non-commercial, as long as the following credit is included identifying the original source of the Software: "from Higher-Order Perl by Mark Dominus, published by Morgan Kaufmann Publishers, Copyright 2005 by Elsevier Inc".
2 Disclaimer of Warranty.
We make no warranties at all. The Software is transferred to you on an "as is" basis. You use the Software at your own peril. You assume all risk of loss for all claims or controversies, now existing or hereafter, arising out of use of the Software. We shall have no liability based on a claim that your use or combination of the Software with products or data not supplied by us infringes any patent, copyright, or proprietary right. All other warranties, expressed or implied, including, without limitation, any warranty of merchantability or fitness for a particular purpose are hereby excluded.
3 Limitation of Liability.
We will have no liability for special, incidental, or consequential damages even if advised of the possibility of such damages. We will not be liable for any other damages or loss in any way connected with the Software.
2022-04-07 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.