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.