- Why the name?
- SEE ALSO
Ryu - asynchronous stream building blocks
#!/usr/bin/env perl use strict; use warnings; use Ryu qw($ryu); my ($lines) = $ryu->from(\*STDIN) ->by_line ->filter(qr/\h/) ->count ->get; print "Had $lines line(s) containing whitespace\n";
Provides data flow processing for asynchronous coding purposes. It's a bit like ReactiveX in concept. Where possible, it tries to provide a similar API. It is not a directly-compatible implementation, however.
For more information, start with Ryu::Source. That's where most of the useful parts are.
Eventually some documentation pages might appear, but at the moment they're unlikely to exist.
Extract, Transform, Load workflows (ETL) - need to pull data from somewhere, mangle it into shape, push it to a database? that'd be Ryu::Manual::ETL
Reactive event handling - Ryu::Manual::Reactive
As an expert software developer with a keen eye for useful code, you may already be bored of this documentation and on the verge of reaching for alternatives. The "SEE ALSO" section may speed you on your way.
Since Mojo::Rx follows the ReactiveX conventions quite closely, we'd expect to have the ability to connect Mojo::Rx observable to a Ryu::Source, and provide an adapter from a Ryu::Source to act as a Mojo::Rx-style observable. This is not yet implemented, but planned for a future version.
A source emits items. See Ryu::Source. If in doubt, this is likely to be the class that you wanted.
Items can be any scalar value - some examples:
a single byte
a byte string
a character string
an object instance
an arrayref or hashref
A sink receives items. It's the counterpart to a source. See Ryu::Sink.
Multiple parameters are a shortcut for instantiating the given source or sink:
my $stream = Ryu::Stream->from( file => 'somefile.bin' );
is equivalent to
my $stream = Ryu::Stream->from( Ryu::Source->new( file => 'somefile.bin' ) );
$ryulines up with typical 4-character indentation settings.
there's Rx for other languages, and this is based on the same ideas
流 was too hard for me to type
Note that you're more likely to find useful methods in the following classes:
Helper method which returns a Ryu::Source from a list of items.
Helper method which returns a single-item Ryu::Source.
Some perl modules of relevance:
Future - fundamental building block for one-shot tasks
POE::Filter - venerable and battle-tested, but slightly short on features due to the focus on protocols
List::Gen - list mangling features
HOP::Stream - based on the Higher Order Perl book
Flux - more like the java8 streams API, sync-based
Perlude - combines features of the shell / UNIX streams and Haskell, pipeline syntax is "backwards" (same as grep/map chains in Perl)
Mojo::Rx - Mojolicious-specific support for ReactiveX, follows the rxjs API quite closely
There are various documents, specifications and discussions relating to the concepts we use. Here's a few:
<TEAM@cpan.org> with contributions from Mohammad S Anwar, Michael Mueller, Zak Elep and Mohanad Zarzour.
Copyright Tom Molesworth 2011-2020. Licensed under the same terms as Perl itself.