my $eq = sub { $_[0] == $_[1] }; my $lt = sub { $_[0] < $_[1] }; # ... while (<>) { $num ="2"; if ( ...some logic... ) { $op = $eq; } else { $op = $lt; } $eq = sub { $_[0] == $_[1] }; /(\d+).*/; if ($op->( $num, $1 ) ) { print "match\n"; } }