NAME
    String::Bash - Parameter expansion in strings
VERSION
    version 1.110960
SYNOPSIS
        use String::Bash qw( bash );
        # pass hashref
        print bash "Hello %{name:-Guest}!", { name => 'Alex' };
        # or key/value pairs
        print bash "Hello %{name:-Guest}!", name => 'Alex';
        # or object which can('name');
        my $user = My::Users->new( name => 'Alex' );
        print bash "Hello %{name:-Guest}!", $user;
        # or use lexical vars
        my $name = 'Alex';
        print bash "Hello %{name:-Guest}!";
    all will print
        Hello Alex
    or if *name* is undefined or empty
        Hello Guest
DESCRIPTION
    String::Bash is based on shell parameter expansion from Bash
    , thus it allows to provide default
    values, substrings and in-place substitutions, changing case of
    characters and nesting.
    The String::Bash provides "bash" exported with Sub::Exporter.
REPLACEMENT VALUES
    Replacements can be provided in four different ways:
  Hash reference
        my $hashref = { param1 => 'value1', ... };
        print bash $format, $hashref;
  Key/value pairs
        print bash $format, param1 => 'value1', ...;
  Object
        print bash $format, $object;
    Please note that $object needs to implement *read/write* accessors (if
    "%{param:=word}" is used, otherwise *read-only* are sufficient) for all
    parameters used in $format.
  Lexical variables
        my $param1 = ...;
        our $param2 = ...;
        print bash $format;
    Lexical ("my") and package ("our") scalar variables visible at the scope
    of "bash" caller are available as replacement.
FORMAT SYNTAX
    Please assume that following variables are visible in below examples:
        my $param = 'hello';
        my $not_set;
        my $param2 = 'WELCOME';
  %{param}
        print bash "%{param}"; # hello
    Value of $param is substituted.
  %{param:-word}
        print bash "%{param:-word}";    # hello
        print bash "%{not_set:-word}";  # word
    If $param is unset or null, the expansion of *word* is substituted.
    Otherwise, the value of $param is substituted.
    The *word* can be another parameter so nesting is possible:
        print bash "%{not_set:-%{param2}}"; # WELCOME
  %{param:=word}
        print bash "%{not_set:=word}"; # word
    If $param is unset or null, the expansion of *word* is assigned to
    $param. The value of $param is then substituted.
    Notes on replacement syntax:
    *   If "Object" is passed as replacement than assignment will execute
        following code:
            $obj->$param( 'word' );
    *   If "Key/value pairs" are passed as replacement then the assignment
        will be applied to occurrences of *param* after the assignment has
        been done, and will be disregarded after parsing is done.
    *   If "Lexical variables" are used, then their value will be set to
        *word*.
  %{param:+word}
        print bash "%{param:+word}";   # word
        print bash "%{not_set:+word}"; #
    If $param is null or unset, nothing is substituted, otherwise the
    expansion of *word* is substituted.
  %{param:offset}
  %{param:offset:length}
        print bash "%{param:2}";     # llo
        print bash "%{param:2:2}";   # ll
    Expands to up to *length* characters of $param starting at the character
    specified by *offset*. If *length* is omitted, expands to the substring
    of $param starting at the character specified by *offset*.
  %{#param}
        print bash "%{#param}";   # 5
    The length in characters of the value of $param is substituted.
  %{param#word}
  %{param##word}
        print bash "%{param#he*l}";   # lo
        print bash "%{param##he*l}";  # o
    The *word* is expanded to produce a pattern (see "Pattern expansion").
    If the pattern matches the beginning of the value of $param, then the
    result of the expansion is the expanded value of $param with the
    shortest matching pattern (the *'#'* case) or the longest matching
    pattern (the *'##'* case) deleted.
  %{param%word}
  %{param%%word}
        print bash "%{param%l*o}";   # hel
        print bash "%{param%%l*o}";  # he
    The *word* is expanded to produce a pattern (see "Pattern expansion").
    If the *pattern* matches a trailing portion of the value of $param, then
    the result of the expansion is the value of $param with the shortest
    matching pattern (the *'%'* case) or the longest matching pattern (the
    *'%%'* case) deleted.
  %{param/pattern/string}
        print bash "%{param/l/t}";   # hetlo
        print bash "%{param//l/t}";  # hetto
        print bash "%{param/#h/t}";  # tello
        print bash "%{param/%o/t}";  # hellt
    The *pattern* is expanded to produce a pattern (see "Pattern
    expansion"). The longest match of *pattern* against $param value is
    replaced with *string*. If *pattern* begins with *'/'*, all matches of
    *pattern* are replaced with *string*. Normally only the first match is
    replaced. If *pattern* begins with *'#'*, it must match at the beginning
    of the value of $param. If *pattern* begins with *'%'*, it must match at
    the end of the $param. If *string* is null, matches of *pattern* are
    deleted and the */* following *pattern* may be omitted.
  %{param^pattern}
  %{param^^pattern}
  %{param,pattern}
  %{param,,pattern}
        print bash "%{param^}";     # Hello
        print bash "%{param^^}";    # HELLO
        print bash "%{param2,}";    # wELCOME
        print bash "%{param2,,}";   # welcome
        print bash "%{param^[hl]}";     # Hello
        print bash "%{param^^[hl]}";    # HeLLo
        print bash "%{param2,[WE]}";    # wELCOME
        print bash "%{param2,,[WE]}";   # weLCOMe
    This expansion modifies the case of alphabetic characters in $param. The
    *pattern* is expanded to produce a pattern (see "Pattern expansion").
    The *'^'* operator converts lowercase letters matching pattern to
    uppercase; the *','* operator converts matching uppercase letters to
    lowercase. The *'^^'* and *',,'* expansions convert each matched
    character in $param; the *'^'* and *','* expansions match and convert
    only the first character in the value of $param. If *pattern* is
    omitted, it is treated like a *'?'*, which matches every character.
NOTES
  Pattern expansion
    Pattern expansion is performed using following rules (based on filename
    expansion):
        # Character       # Replacement (perl syntax)
        *                 .*
        ?                 .
        [a-z]             [a-z]
    Please do not use perl regular expression syntax in pattern
    substitutions, or you may get unexpected results.
COMPATIBILITY WITH BASH
    String::Bash provides only syntax described above and some of Bash
    features (like expansions of arrays) are not available - but please let
    me know if you need them.
SEE ALSO
    *   Shell Parameter Expansion in Bash
        
AUTHOR
    Alex J. G. Burzyński 
COPYRIGHT AND LICENSE
    This software is copyright (c) 2011 by Alex J. G. Burzyński
    .
    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.