in reply to Assign multiple items into an array containing the range operator from a file

Use a regex to extract the range edges from each line, then use the range operator to turn them into a sequence:
#!/usr/bin/perl use warnings; use strict; my @sets = []; while (my $line = <DATA>) { if ($line =~ /\[([0-9]+)\.\.([0-9]+)\]/) { my ($from, $to) = ($1, $2); $line = [$from .. $to]; } else { chomp $line; $line = [$line]; } @sets = map { my @prev = @$_; map [ @prev, $_ ], @$line } @sets; } use Data::Dump 'dd'; dd @sets; __DATA__ [0..1] [2..4] 9 [5..8]

Updated: missing $line in chomp, ThanX LanX.

map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]