sub send { my $self = shift || return 0; return 0 unless ref $self; unless (@_ == 3) { $self->{ERROR}->set(ILL_NUM); return 0; } my $sock; ($sock, $self->{COMMAND}, $self->{CONTENT}) = @_; $self->{ERROR}->set(ILL_ARG1) if ref $self->{COMMAND}; $self->{ERROR}->set(ILL_ARG2) unless ref $self->{CONTENT}; return 0 if $self->{ERROR}->get; $self->{CONTENT} = freeze $self->{CONTENT}; # COMMANDSIZE is what SOBJCOMMAND was for the caller, # CONTENTSIZE refers to SOBJCONTENT in this example (just # a primitive protocol) my $str = sprintf("%".$self->{COMMANDSIZE}."s", $self->{COMMAND}) . sprintf("%0".$self->{CONTENTSIZE}."d", CORE::length($self->{CONTENT})) . $self->{CONTENT}; local $\ = undef; # the magic unless ($sock->send($str)) { $self->{ERROR}->set(SOCK_SEND, $!); return 0; } 1; }