#!/usr/bin/perl use strict; use warnings; use 5.010; my %ops = ('==' => \&doEq, '=>' => \&doGe, '<=' => \&doLe, '**' => \&doStar,); my $opMatch = join '|', map {qr{\Q$_\E}} keys %ops; while (my $line = ) { chomp($line); my ($op) = $line =~ m{\s($opMatch)\s}; if ($op) { $ops{$op}->($line); } else { print "No op found: $line\n"; } } sub doEq {my ($line) = @_; print "Do da ==: $line\n";} sub doLe {my ($line) = @_; print "Doing <=: $line\n";} sub doGe {my ($line) = @_; print "Doing =>: $line\n";} sub doStar {my ($line) = @_; print "Process **: $line\n";} __DATA__ 1234 <= inb@it.com 1234 <= inb@it.com 1235 => pp 1235 ++ pp #### Doing <=: 1234 <= inb@it.com Doing <=: 1234 <= inb@it.com Doing =>: 1235 => pp No op found: 1235 ++ pp