我目前正在搞乱Perl和网络cookie。我正在从HTTP_COOKIE环境变量中收集信息,但是我仍然坚持如何对结果进行排序。
简单的“排序{$ cookie}”对我来说很好,但是当使用拆分功能时我会被卡住。有没有办法对数组进行排序?
收集数据:
sub netcookie {;
my $cookie = $ENV{'HTTP_COOKIE'};
#foxcookie
};
my $cookie = netcookie();
我有一个动态加载网站,它根据cookie的“级别”值加载一个寺庙文件。
当用户通过身份验证时,cookie会使用图章,精灵和宫殿进行更新,因此cookie看起来像这样:
HTTP_COOKIE
stamp=stamps/stamp.0.113646176072308;
sprite=stamps/sprite.0.385163302390964;
palace=stamps/palace.0.57031374346893;
level=5.0:Palace;
magic=palace.pixc
在此之前,cookie看起来像这样可以很容易地映射到$ level和$ magic
HTTP_COOKIE
level=2.3:FoxCookie;
magic=foxcookie.pixc;
我正在使用的代码是:
my ($level,$magic,$stamp,$sprite,$palace) = split ';', $cookie;
#split $cookie in to variables delimited by ;
然而,由于我后来添加的额外cookie值,$ level不再变为$ level,最终变得混乱。
如果排序(等等)不是真的可行,那么下一个最佳方式是什么?
if ($level =~ 'level=5.0:Palace')
#If the cookie contains level palace
{
print "Welcome to the TeddyPortal of the CrystalForest Palace";
rawr::fountain::magic("$level","$magic");
}
我试过这样的:
my $cube = sort($cookie);
my @cube = sort($cookie);
my &cube = sort($cookie);
所有结果都失败了。但是我似乎也不能使用:
my $cookie = sort(netcookie());
tl; dr:对分裂进行排序
谢谢,Mookie
您可以使用hash
将cookie密钥名称记录为哈希密钥,方法是将数据分成两次:一次在';'上然后再次'='
my @parts = split /;\s*/, $cookie;
my %hash;
for my $part (@parts) {
my ($key,$val) = split /=/, $part;
$hash{$key} = $val;
}
这是一个更简洁的版本。您可以这样做,因为哈希可以表示为键值对列表。
my %hash = map {split /=/, $_} split /;\s*/, $cookie;
访问以下值:print $hash{level}."\n"