У меня есть объект Moose, у которого в качестве одного из атрибутов используется объект IO :: Socket :: INET:
has socket => (
is => 'ro',
required => 1,
lazy => 1,
isa => 'IO::Socket::INET',
builder => 'connect',
);
Сокет инициализируется в скрипте, который выглядит следующим образом (часть аутентификацииудалено):
sub connect {
my $self = shift;
my $host = 'A.B.C.D';
my $port = N;
my $handle = IO::Socket::INET->new(
Proto => "tcp",
PeerAddr => $host,
PeerPort => $port
) or die "can't connect to port $port on $host: $!";
$handle->autoflush(1);
# Connect to Server with $handle and authenticate
# and if successful .......
return $handle;
}
Однако я нахожу странное поведение, когда запускаю следующий тестовый код:
my $x = MyObject->new;
print $x->socket pack('I', 392);
Полученные сервером (ABCD) байты полностью отличаются от тех, которые япослал.Я проверил, что порядок байтов или байтов не является проблемой. На самом деле простой скрипт, который создает сокет и записывает те же данные без использования Moose, работает отлично - данные принимаются на сервере точно так, как ожидалось .
Должен ли я делать что-то большее, чем то, что я делаю, если мой атрибут Moose является постоянным объектом IO :: Socket :: INET.Атрибут сокета закрывается или иным образом манипулируется за моей спиной?
Спасибо.