epasveer has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks,

Is there a module, or does someone have a way of expanding a string that contains a regexp?

For example, I'd like to expand this text into a list of hosts.
"rack[001-004]" => "rack001", "rack002", "rack003", "rack004"
Thanks.

Replies are listed 'Best First'.
Re: Expanding reg expression.
by Corion (Patriarch) on Oct 31, 2007 at 19:26 UTC
Re: Expanding reg expression.
by moritz (Cardinal) on Oct 31, 2007 at 20:00 UTC
    I think Regexp::Genex will do what you want.

    Btw [001-004] in a regex don't match '001'; in fact that "regex" produces <c>Invalid [] range "1-0" in regex

Re: Expanding reg expression.
by amarquis (Curate) on Oct 31, 2007 at 19:37 UTC

    If you want what I think you want, it might be good to check out the magic in the ++ operator.

    "The auto-increment operator has a little extra builtin magic to it. If you increment a variable that is numeric, or that has ever been used in a numeric context, you get a normal increment. If, however, the variable has been used in only string contexts since it was set, and has a value that is not the empty string and matches the pattern /^[a-zA-Z]*[0-9]*\z/, the increment is done as a string, preserving each character within its range, with carry."

    For example:

    print ++($test = "test004");

    Prints test005. Just be careful not to go over 999, because the carry will then start changin' the 'test' part of your string.