为什么这个哈希值未定义?
Why is this hash value undefined?
所以我觉得这是我的一些愚蠢的错误,但我不知道发生了什么。
先了解一些上下文:我正在玩 webRTC,用 perl 和 js 构建一个小型视频聊天应用程序。我害怕卡在 webRTC 部分,但事实证明我卡在了 perl 上。
在我的文件的顶部,我实例化了一个像这样的散列
helper clients => sub { state $clients = {} }
每当有人上车时 /
我检查我是否有当前客户的 UID。如果不是我生成并存储它。然后我检查客户端是否已经在客户端哈希中。
if (!$self->session('uid')) {
$self->session('uid' => sha256_hex($self->tx . irand()));
}
if (!exists $self->clients->{$self->session('uid')}) {
$self->clients->{$self->session('uid')} = $self->tx;
}
问题出现在我的信令服务器上。当我使用来自
解码后的 json 我得到一个未定义的错误。请注意,循环是无用的,我这样做是为了调试。
相关代码如下:
$self->on(
message => sub {
my ( $ws, $message ) = @_;
my $json = decode_json($message);
for (keys %{$self->clients}) {
app->log->info('$_ is a => ' . $_);
# $_ => 0d96bc9bb05feb9a7c2889209ee777affcaa11252be54ca7ddc349889978850f
app->log->info('json uid => ' . $json->{'uid'});
# json uid => 0d96bc9bb05feb9a7c2889209ee777affcaa11252be54ca7ddc349889978850f
app->log->info('remote address with $_ => ' . $self->clients->{$_}->remote_address);
# remote address with $_ => 127.0.0.1
app->log->info('remote address with string => ' . $self->clients->{'0d96bc9bb05feb9a7c2889209ee777affcaa11252be54ca7ddc349889978850f'}->remote_address);
# remote address with string => 127.0.0.1
app->log->info('remote address with json_ => ' . $self->clients->{$json->{'uid'}}->remote_address);
# Can't call method "remote_address" on an undefined value at blabla
}
....
}
);
我不明白的是 $_
和 $json->{'uid'}
具有相同的值,那么为什么第一个工作而不是第二个?
它们显然不具有相同的值。尾随空格?
use Data::Dumper qw( Dumper );
{
local $Data::Dumper::Useqq = 1;
print(Dumper($json->{uid}));
}
或者在您的情况下,app->log->info
而不是 print
。
所以我觉得这是我的一些愚蠢的错误,但我不知道发生了什么。
先了解一些上下文:我正在玩 webRTC,用 perl 和 js 构建一个小型视频聊天应用程序。我害怕卡在 webRTC 部分,但事实证明我卡在了 perl 上。
在我的文件的顶部,我实例化了一个像这样的散列
helper clients => sub { state $clients = {} }
每当有人上车时 /
我检查我是否有当前客户的 UID。如果不是我生成并存储它。然后我检查客户端是否已经在客户端哈希中。
if (!$self->session('uid')) {
$self->session('uid' => sha256_hex($self->tx . irand()));
}
if (!exists $self->clients->{$self->session('uid')}) {
$self->clients->{$self->session('uid')} = $self->tx;
}
问题出现在我的信令服务器上。当我使用来自 解码后的 json 我得到一个未定义的错误。请注意,循环是无用的,我这样做是为了调试。
相关代码如下:
$self->on(
message => sub {
my ( $ws, $message ) = @_;
my $json = decode_json($message);
for (keys %{$self->clients}) {
app->log->info('$_ is a => ' . $_);
# $_ => 0d96bc9bb05feb9a7c2889209ee777affcaa11252be54ca7ddc349889978850f
app->log->info('json uid => ' . $json->{'uid'});
# json uid => 0d96bc9bb05feb9a7c2889209ee777affcaa11252be54ca7ddc349889978850f
app->log->info('remote address with $_ => ' . $self->clients->{$_}->remote_address);
# remote address with $_ => 127.0.0.1
app->log->info('remote address with string => ' . $self->clients->{'0d96bc9bb05feb9a7c2889209ee777affcaa11252be54ca7ddc349889978850f'}->remote_address);
# remote address with string => 127.0.0.1
app->log->info('remote address with json_ => ' . $self->clients->{$json->{'uid'}}->remote_address);
# Can't call method "remote_address" on an undefined value at blabla
}
....
}
);
我不明白的是 $_
和 $json->{'uid'}
具有相同的值,那么为什么第一个工作而不是第二个?
它们显然不具有相同的值。尾随空格?
use Data::Dumper qw( Dumper );
{
local $Data::Dumper::Useqq = 1;
print(Dumper($json->{uid}));
}
或者在您的情况下,app->log->info
而不是 print
。