sub relay{ my $self = shift; if(!ref($self)){ croak "can not call relay from a class"; } my $handle = $self->{input}->{fh}; given ($self->{input}->{type}){ when ('named_pipe'){ open $handle,'<',$self->{input}->{name}; while(<$handle>){ $self->_write($_); } } when('unix_socket'){ while(my $socket = $handle->accept()||croak "$!"){ while(<$socket>){ my $data = $_; print "I receive $data\n"; $self->_write($data); } } } when('network_socket'){ print "gonna try and listen on network socket named $self->{input}->{name}\n"; my $socket = $handle->accept()||croak"$!"; print "listening\n"; while(<$socket>){ my $data = $_; print "I receive $data\n"; $self->_write($data); } } } } sub _write{ my $self = shift; if(!ref $self){ croak "can not do that as a class!"; } my $input = shift; my @keys = keys $self->{output}; 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('unix_socket'){ my $server = $self->{output}->{$key}->{fh}; my $socket = $server->accept() or croak "$!"; print "trying to send $input to $self->{output}->{$key}->{name}"; print $socket $input or croak "$!"; } when('network_socket'){ my $server = $self->{output}->{$key}->{fh}; my $socket = $server->accept() or croak "$!"; print "tring to send $input to inet\n"; print $socket $input; print "done printing\n"; } } } }