NAME
Data::Unixish - Implementation for Unixish, a data transformation
framework
VERSION
version 1.42
SYNOPSIS
# the a/f/l/c prefix determines whether function accepts
# arrayref/file(handle)/list/callback as input. the a/f/l/c suffix determines
# whether function returns an array, a list, a filehandle, or calls a callback.
# If filehandle is chosen as output, a child process is forked to process input
# as requested.
use Data::Unixish qw(
aduxa cduxa fduxa lduxa
aduxc cduxc fduxc lduxc
aduxf cduxf fduxf lduxf
aduxl cduxl fduxl lduxl
); # or you can use :all to export all functions
# apply function, without argument
my @out = lduxl('sort', 7, 2, 4, 1); # => (1, 2, 4, 7)
my $out = lduxa('uc', "a", "b", "c"); # => ["A", "B", "C"]
my $res = fduxl('wc', "file.txt"); # => "12\n234\n2093" # like wc's output
# apply function, with some arguments
my $fh = fduxf([trunc => {width=>80, ansi=>1, mb=>1}], \*STDIN);
say while <$fh>;
DESCRIPTION
This distribution implements Unixish, a data transformation framework
inspired by Unix toolbox philosophy.
FUNCTIONS
The functions are not exported by default. They can be exported
individually or altogether using export tag ":all".
aduxa($func, \@input) => ARRAYREF
aduxc($func, $callback, \@input)
aduxf($func, \@input) => FILEHANDLE
aduxl($func, \@input) => LIST (OR SCALAR)
The "adux*" functions accept an arrayref as input. $func is a string
containing dux function name (if no arguments to the dux function is to
be supplied), or "[$func, \%args]" to supply arguments to the dux
function. Dux function name corresponds to module names
"Data::Unixish::NAME" without the prefix.
The *duxc functions will call the callback repeatedly with every output
item.
The *duxf functions returns filehandle immediately. A child process is
forked, and dux function is run in the child process. You read output as
lines from the returned filehandle.
The *duxl functions returns result as list. It can be evaluated in
scalar to return only the first element of the list. However, the whole
list will be calculated first. Use *duxf for streaming interface.
cduxa($func, $icallback) => ARRAYREF
cduxc($func, $icallback, $ocallback)
cduxf($func, $icallback) => FILEHANDLE
cduxl($func, $icallback) => LIST (OR SCALAR)
The "cdux*" functions accepts a callback ($icallback) to get input
elements from. Input callback function should return a list of one or
more elements, or an empty list to signal end of stream.
An example:
cduxa($func, sub {
state $a = [1,2,3,4];
if (@$a) {
return shift(@$a);
} else {
return ();
}
});
fduxa($func, $file_or_handle, @args) => ARRAYREF
fduxc($func, $callback, $file_or_handle, @args)
fduxf($func, $file_or_handle, @args) => FILEHANDLE
fduxl($func, $file_or_handle, @args) => LIST
The "fdux*" functions accepts filename or filehandle. @args is optional
and will be passed to Tie::File.
lduxa($func, @input) => ARRAYREF
lduxc($func, $callback, @input)
lduxf($func, @input) => FILEHANDLE
lduxl($func, @input) => LIST
The "ldux*" functions accepts list as input.
None are exported by default, but they are exportable.
FAQ
I'm getting "Use of uninitialized value in push at lib/Data/Unixish/XXX.pm line XX." messages!
This looks like a bug in perl 5.10.1 or earlier. Try upgrading to perl
5.12 or later.
How do I use the diamond operator as input?
You can use Tie::Diamond, e.g.:
use Tie::Diamond;
tie my(@in), "Tie::Diamond";
my $out = aduxa($func, \@in);
Also see the dux command-line utility in the App::dux distribution which
allows you to access dux function from the command-line.
SEE ALSO
Unixish
dux script in App::dux
HOMEPAGE
Please visit the project's homepage at
<https://metacpan.org/release/Data-Unixish>.
SOURCE
Source repository is at
<https://github.com/sharyanto/perl-Data-Unixish>.
BUGS
Please report any bugs or feature requests on the bugtracker website
<https://rt.cpan.org/Public/Dist/Display.html?Name=Data-Unixish>
When submitting a bug or request, please include a test-file or a patch
to an existing test-file that illustrates the bug or desired feature.
AUTHOR
Steven Haryanto <stevenharyanto@gmail.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2013 by Steven Haryanto.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.