oracular (3) String::Glob::Permute.3pm.gz

Provided by: libstring-glob-permute-perl_0.01-4_all bug

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 (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>