#!/usr/bin/perl use warnings; use strict; my $dbh = bless {}, 'My::Mock'; sub My::Mock::selectrow_array { {cmd => 'transref_seq_add'} } sub works { my %transseqchk; my $transref_chksql = 'blah'; my $transseqchk->{transchk}= ( $dbh->selectrow_array($transref_chksql) )[0]; $transseqchk->{transref_seq_add}{cmd} = sub{ my $encode_transref_seqmsql = 'blah'; $dbh->do($encode_transref_seqmsql); }; warn "CMD: $transseqchk->{transchk}->{cmd}."; if ($transseqchk->{transchk}{cmd}){ warn "DOES $transseqchk->{transchk}->{cmd}."; &{$transseqchk->{transchk}->{cmd}}; } } sub doesnt { my $transref_chksql = 'blah'; my $transseqchk->{transchk} = ( $dbh->selectrow_array($transref_chksql) )[0]; my %actionsw = ( transref_seq_add => { cmd => sub { my $encode_transref_seqmsql = 'blah'; $dbh->do($encode_transref_seqmsql); } } ); warn "KEY: $transseqchk->{transchk}."; warn "CMD: $actionsw{ $transseqchk->{transchk} }->{cmd}."; if ($actionsw{ $transseqchk->{transchk} }->{cmd}){ warn "DOESNT $actionsw{$transseqchk->{transchk}}->{cmd}."; &{$actionsw{$transseqchk->{transchk}}->{cmd}}; } } eval { works(); 1 } or warn "w: $@"; eval { doesnt(); 1 } or warn "n: $@";