#!perl use strict; use warnings; my $input = "@ARGV"; my @pairs = split /,/, $input; foreach my $pair (@pairs){ $pair =~ s/^\s+//;$pair =~ s/\s+$//; print map {"->$_\n"} &exp_coord($pair); } sub exp_coord { my ($r,$c)=split /\s/,"@_"; unless (defined $r and defined $c) {warn "Both must be defined. Received:",map{defined $_ ? "$_ " : 'UNDEF '}($r,$c);return} my @r; my @c; my @expanded; @r = $r=~/^(.*\d)-(.+)$/ ? ($1..$2) : ($r); @c = $c=~/^(.*\d)-(.+)$/ ? ($1..$2) : ($c); for my $rc (@r) { for my $cc (@c) { push @expanded, "$rc $cc" } }; return @expanded; }