# IPC/Msg.pm lines 61-79 sub set { my $self = shift; my $ds; if(@_ == 1) { $ds = shift; } else { croak 'Bad arg count' if @_ % 2; my %arg = @_; my $ds = $self->stat or return undef; my($key,$val); $ds->$key($val) while(($key,$val) = each %arg); } msgctl($$self,IPC_SET,$ds->pack); } #### my $ds = $self->stat #### $ds = $self->stat #### { package IPC::Msg::Bugfix; our @ISA = qw/ IPC::Msg /; sub set { # corrected version of set here ... } } # in your code my $msg = new IPC::Msg::Bugfix('24h', IPC_CREAT); # and continue as before #### # avoiding buggy multiple-arg set() # $msg->set('qbytes' => 32768); my $ds = $msg->stat or die "stat: $!"; $ds->qbytes(32768); $msg->set($ds);