2015-10-04 41 views
0

我写信,试图确保新的网络套接字连接具有特定的Cookie内似乎什么搜索是阵列的Perl中的数组(网络插座)

这里是一些代码的连接细节的摘录我接收在所述服务器,这是我使用print Dumper($handshake->req->cookies);

$VAR1 = bless({ 
      'pairs' => [ 
          [ 
          'ZMSESSID', 
          'e63n6uk59entuvoed1o76u1hm6' 
          ] 
         ] 
      }, 'Protocol::WebSocket::Cookie'); 

我现在需要搜索阵列的“对”阵列内,以查看是否存在一个名为“ZMSESSID”的Cookie打印。它可能存在也可能不存在,并且可能有其他cookie。

这样做的正确方法是什么?

我尝试:

if ($handshake->req->cookies->pairs) 
{ 

    my @foo = $handshake->req->cookies->pairs; 
    my $match = grep { $_->[0] eq 'ZMSESSID'} @foo ; 
    print "$match\n"; 
} 

但是,这始终打印0,而不是1

回答

2

这是含有用带2层的元件的阵列的1个单个元件的阿雷一个福地hashref。

所以搜索,你可以做..

foreach my $c (@{ $_->{pairs}[0]}) 
{ 
    print "Match\n" if $c eq 'ZMSESSID'; 
} 

虽然因为你有一个网页套接字的一个实例::饼干::要求,因为在http://search.cpan.org/~vti/Protocol-WebSocket-0.19/lib/Protocol/WebSocket/Cookie/Request.pm

描述你可以使用与它相关的方法和属性

也尝试从命令外壳程序perldoc Protocol::WebSocket::Cookie::Request

您可以访问对象实例的方法(祝福hashref)并访问文档中描述的属性。 $ handshake-> req-> cookies->名字

+0

彼得,对不起,我是一个初学者。我有几个后续:我试着最后一个例子:if($ handshake-> req-> cookies-> ZMSESSID) - 通过包“Protocol无法定位对象方法”ZMSESSID“Protocol :: WebSocket :: Cookie“在你的第一个例子中,你正在使用$ _ ==>我需要将它映射到$ handshake-> req吗? – user1361529

+0

所以我用for循环取得了一些进展,但似乎无法弄清楚如何处理cookie存在与否的情况我的代码位于http://pastebin.com/4CbdE5BE - >当“cookie定义”字段实际存在时,“if defined”出现“不是ARRAY引用” 。我试图处理的情况下,它没有崩溃时,没有饼干,但最终弄乱了相反的情况。我该如何处理? – user1361529

+0

屁股很痛苦,看起来好像cookie列表是空,$ handshake-> req-> cookies是一个空数组,如果它有cookies,它是一个哈希引用。所以我最终通过这样做来解决它:if(UNIVERSAL :: isa($ handshake-> req-> cookies, “哈希”))(然后做你的东西) – user1361529