######################################################################
    String::Glob::Permute 0.01
######################################################################

NAME
    String::Glob::Permute - Expand {foo,bar,baz}[2-4] style string globs

SYNOPSIS
        use String::Glob::Permute qw( string_glob_permute );

        my $pattern = "host{foo,bar,baz}[2-4]";

        for my $host (string_glob_permute( $pattern )) {
            print "$host\n";
        }

          # hostfoo2
          # hostbar2
          # hostbaz2
          # hostfoo3
          # hostbar3
          # hostbaz3
          # hostfoo4
          # hostbar4
          # hostbaz4

DESCRIPTION
    The "string_glob_permute()" function provided by this module expands
    glob-like notations in text strings and returns all possible
    permutations.

    For example, to run a script on hosts host1, host2, and host3, you might
    write

        @hosts = string_glob_permute( "host[1-3]" );

    and get a list of hosts back: ("host1", "host2", "host3").

    Ranges with gaps are also supported, just separate the blocks by commas:

        @hosts = string_glob_permute( "host[1-3,5,9]" );

    will return ("host1", "host2", "host3", "host5", "host9").

    And, finally, using curly brackets and comma-separated lists of strings,
    as in

        @hosts = string_glob_permute( "host{dev,stag,prod}" );

    you'll get permutations with each of the alternatives back: ("hostdev",
    "hoststag", "hostprod") back.

    All of the above can be combined, so

        my @hosts = string_glob_permute( "host{dev,stag}[3-4]" );

    will result in the permutation ("hostdev3", "hoststag3", "hostdev4",
    "hoststag4").

    The patterns allow numerical ranges only [1-3], no string ranges like
    [a-z]. Pattern must not contain blanks.

    The function returns a list of string permutations on success and
    "undef" in case of an error. A warning is also issued if the pattern
    cannot be recognized.

  Zero padding
    An expression like

        @hosts = string_glob_permute( "host[8-9,10]" );
          # ("host8", "host9", "host10")

    will expand to ("host8", "host9", "host10"), featuring no zero-padding
    to create equal-length entries. If you want ("host08", "host09",
    "host10"), instead, pad all integers in the range expression
    accordingly:

        @hosts = string_glob_permute( "host[08-09,10]" );
          # ("host08", "host09", "host10")

  Note on Perl's internal Glob Permutations
    Note that there's a little-known feature within Perl itself that does
    something similar, for example

        print "$_\n" for < foo{bar,baz} >;

    will print

        foobar
        foobaz

    if there is no file in the current directory that matches that pattern.
    String::Glob::Permute, on the other hand, expands irrespective of
    matching files, by simply always returning all possible permutations.
    It's also worth noting that Perl's internal Glob Permutation does not
    support String::Glob::Permute's [m,n] or [m-n] syntax.

COPYRIGHT & LICENSE
    Copyright (c) 2008 Yahoo! Inc. All rights reserved. The copyrights to
    the contents of this file are licensed under the Perl Artistic License
    (ver. 15 Aug 1997).

AUTHOR
    Algorithm, Code: Rick Reed, Ryan Hamilton, Greg Olszewski. Module: 2008,
    Mike Schilli <cpan@perlmeister.com>

