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

Oh wise monks How can I get code like this:
my $range = "1..10" for my $x ($range) { print "$x\n"; }
to print out the numbers from 1 to 10? That is specify a range to use in the for loop programmatically? Thanks

Replies are listed 'Best First'.
Re: Specifying a range through a variable
by dragonchild (Archbishop) on Sep 19, 2008 at 02:16 UTC
    my @range = 1..10; for my $x (@range) { print "$x\n"; }

    My criteria for good software:
    1. Does it work?
    2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?
      what if the range is passed in as a string? How to do convert the string "1..10" to mean the range 1 through to 10?
        How to do convert the string "1..10" to mean the range 1 through to 10

        A bit kludgey:
        use warnings; my $range = "1..10"; my @wanted = range($range); print "@wanted\n"; sub range { my @t = split /\.\./, $_[0]; return ($t[0] .. $t[1]); }
        Update: To return first and last values, obviously:
        sub range { my @t = split /\.\./, $_[0]; return ($t[0], $t[1]); }
        Cheers,
        Rob

        Use eval, if you must.

        my $range = '1..10'; for my $x ( eval $range ) { print "$x\n"; }

        Beware, however, that input validation is very important here. The string you pass into eval can be any Perl code, and it will do whatever that code does.