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;