NAME

Function::Version - Define and use different function versions

SYNOPSIS

use Function::Version;

# Define two versions of load() and dump()
my $defn = Function::Version
             ->def('load', '1.5', sub { "load v1.5: $_[0]" })
             ->def('load', '1.6', sub { "load v1.6: $_[0]" })
             ->def('dump', '1.5', sub { "dump v1.5: $_[0]" })
             ->def('dump', '1.6', sub { "dump v1.6: $_[0]" })
             ;

my $load = $defn->func('load')          # Select load() v1.5
                ->ver('1.5');
my $dump = $defn->func('dump')          # Select dump() v1.6
                ->ver('1.6');

                                        # Call with arguments
say $load->with('vista');               # load v1.5: vista
say $dump->with('gems');                # dump v1.6: gems

say $load->ver('1.6')                   # Use other versions
         ->with('hobbits');             # load v1.6: hobbits

                                        # Version does not revert
say $load->with('ring');                # load v1.6: ring

say $dump->func('load')                 # Using other function dies
         ->with('hobbits');             # Error: Assigned to dump()

DESCRIPTION

This module provides a simple way to define and use different function versions.

One use case is when deploying changes to an application. Being able to select the function based on a version number is useful to roll-back or roll-forward changes.

AUTHOR

Hoe Kit CHEW <hoekit@gmail.com>

COPYRIGHT

Copyright 2021- Hoe Kit CHEW

LICENSE

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