foreach my $key (@keys){ if(!defined($self->{output}->{$key}->{fh}) && !$self->{output}->{$key}->{type} eq 'named_pipe'){ croak "undefined fh for key $key\n"; } given($self->{output}->{$key}->{type}){ when('named_pipe'){ open my $handle ,'>',$self->{output}->{$key}->{name} or croak "could not open output handle"; print $handle $input; close $handle; } # when ... } }