#!/usr/bin/env perl -l use strict; use warnings; use lib '.'; use Decoupled qw{ preprocess_complex_message handle_generic_message }; my %decode_type = ( A => sub { handle_generic_message( A => preprocess_complex_message($_[0]) ) }, B => sub { handle_generic_message(B => $_[0]) }, ); while () { chomp; my ($type, $msg) = split /\s+/, $_, 2; my $decoded = $decode_type{$type}->($msg); print $decoded; } __DATA__ B message B1 A more complex message A1 B message B2