sub create_selector { my ($spec) = @_; my $selector; if ($spec =~ m/^=(.*)/) { $selector = sub { $_[0]->version eq $1 } } elsif ($spec =~ m/!=(.*)/) { $selector = sub { $_[0]->version ne $1 } } elsif ($spec =~ m/>(.*)/) { $selector = sub { $_[0]->version gt $1 } } $selector; } my $selector = create_selector("=6.2"); ... my @selected_dists = grep { $selector->{$_} } @list_of_dists; #### sub create_selector { my ($spec) = @_; my $selector; if ($spec =~ m/^(=|!=|<|>)(.*)/) { my $op = $1; my $method = ...translate $op to a method name... $selector = sub { $_[0]->version->$method($2) } } }