NAME Pluto - Functional Programming ABSTRACT Functional Scripting for Perl 5 SYNOPSIS package Cosmos; use Pluto; call(string('hello world'), 'titlecase'); # Hello World DESCRIPTION This package enables functional programming for Perl 5 via indirect routine dispatching and dependency injection, operating in a way that plays nicely with third-party libraries without having to switch over to object-oriented programming. WHY Perl is a multi-paradigm programming language that supports functional programming, but, Perl has an intentionally limited standard library with an emphasis on providing library support via the CPAN which is overwhelmingly object-oriented. This makes developing in a functional style difficult as you'll eventually need to rely on a CPAN library that requires you to switch over to object-oriented programming. LIBRARIES This package uses type constraints from: Types::Standard SCENARIOS This package supports the following scenarios: array # given: synopsis # e.g. # # 0> use Pluto # # 1> array [1..4] # # $res[0] = bless( [ # 1, # 2, # 3, # 4 # ], 'Data::Object::Array' ) # # 2> exit array; This package supports making the array function available in the calling package if it doesn't exist already. This function creates a Data::Object::Array object. bool # given: synopsis # e.g. # # 0> use Pluto # # 1> bool 0 # # $res[0] = bless( do{\(my $o = 0)}, 'Data::Object::Boolean' ) # # 2> exit # e.g. # # 0> use Pluto # # 1> bool 1 # # $res[0] = bless( do{\(my $o = 1)}, 'Data::Object::Boolean' ) # # 2> exit bool; This package supports making the bool function available in the calling package if it doesn't exist already. This function creates a Data::Object::Boolean object. call # given: synopsis call('Test', 'ok'); This package supports making the call function available in the calling package. This function dispatches function and method calls to a package. chain # given: synopsis chain(path('/var'), ['child', 'logs'], 'absolute'); This package supports making the chain function available in the calling package. This function chaining function and method calls. code # given: synopsis # e.g. # # 0> use Pluto # # 1> code sub { time } # # $res[0] = bless( sub { "DUMMY" }, 'Data::Object::Code' ) # # 2> exit code; This package supports making the code function available in the calling package if it doesn't exist already. This function creates a Data::Object::Code object. false # given: synopsis false; This package supports making the false function available in the calling package if it doesn't exist already. This function creates a Data::Object::Boolean object. float # given: synopsis # e.g. # # 0> use Pluto # # 1> float 1.23 # # $res[0] = bless( do{\(my $o = '1.23')}, 'Data::Object::Float' ) # # 2> exit float; This package supports making the float function available in the calling package if it doesn't exist already. This function creates a Data::Object::Float object. hash # given: synopsis # e.g. # # 0> use Pluto # # 1> hash {1..4} # # $res[0] = bless( { # '1' => 2, # '3' => 4 # }, 'Data::Object::Hash' ) # # 2> exit hash; This package supports making the hash function available in the calling package if it doesn't exist already. This function creates a Data::Object::Hash object. inc # given: synopsis inc 'Data::Dumper'; # creates a DataDumper function DataDumper('Dumper', {1..4}); This package supports making the inc function available in the calling package. When used, this function creates a function after the name provided which calls into the named package. Special characters are stripped from the function name. number # given: synopsis # e.g. # # 0> use Pluto # # 1> number 123 # # $res[0] = bless( do{\(my $o = 123)}, 'Data::Object::Number' ) # # 2> exit number; This package supports making the number function available in the calling package if it doesn't exist already. This function creates a Data::Object::Number object. regexp # given: synopsis # e.g. # # 0> use Pluto # # 1> regexp qr/.*/ # # $res[0] = bless( do{\(my $o = qr/.*/u)}, 'Data::Object::Regexp' ) # # 2> exit regexp; This package supports making the regexp function available in the calling package if it doesn't exist already. This function creates a Data::Object::Regexp object. space # given: synopsis # e.g. # # 0> use Pluto # # 1> space 'pluto' # # $res[0] = bless( do{\(my $o = 'pluto')}, 'Data::Object::Space' ) # # 2> exit space; This package supports making the space function available in the calling package if it doesn't exist already. This function creates a Data::Object::Space object. string # given: synopsis # e.g. # # 0> use Pluto # # 1> string 'hello' # # $res[0] = bless( do{\(my $o = 'hello')}, 'Data::Object::String' ) # # 2> exit string; This package supports making the string function available in the calling package if it doesn't exist already. This function creates a Data::Object::String object. true # given: synopsis true; This package supports making the true function available in the calling package if it doesn't exist already. This function creates a Data::Object::Boolean object. AUTHOR Al Newkirk, awncorp@cpan.org LICENSE Copyright (C) 2011-2019, Al Newkirk, et al. This is free software; you can redistribute it and/or modify it under the terms of the The Apache License, Version 2.0, as elucidated in the "license file" . PROJECT Wiki Project Initiatives Milestones Contributing Issues