2017-12-30 54 views
-1

私は現在、Perlとウェブクッキーを使いこなしています。 HTTP_COOKIE環境変数から情報を収集していますが、どのように結果を並べ替えることができますか?ウェブクッキーをソートenv

単純な「sort {$ cookie}」は私にとってはまあまあですが、スプリット機能を使用すると、私は立ち往生します。配列をソートする方法はありますか?データの収集

sub netcookie {; 
my $cookie = $ENV{'HTTP_COOKIE'}; 
#foxcookie 
}; 

my $cookie = netcookie(); 

私はクッキーの「レベル」の値に基づいて、寺のファイルをロードする動的ロードのウェブサイトを持っています。

ユーザーが認証を通過すると、クッキースタンプ、スプライトや宮殿で更新されますので、クッキーは、次のようになります。

HTTP_COOKIE 
stamp=stamps/stamp.0.113646176072308; 
sprite=stamps/sprite.0.385163302390964; 
palace=stamps/palace.0.57031374346893;  
level=5.0:Palace; 
magic=palace.pixc 

これに先立ち、クッキーは簡単に$にマッピングすることができ、このようになります。レベルと$魔法

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にならなくなり、まったく混合された状態になります。

ソート(blah)が実際に実行可能でない場合は、次の最良の方法は何ですか?

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

+0

は 'sort'は、リスト上で動作します。あなたの '$ cookie' varは文字列なので、ソートするものはありません。キー名でデータをソートする場合は、 'my @ sorted = sort(split ';'、$ cookie)'を実行します。しかし、これはあなたがやりたいこと、つまりデータの部分を特定することとは少し関係がありません。 – beasy

答えて

0

あなたは、ハッシュキーとしてクッキーキー名を記録するためにhashを使用することができますデータを2回スプレットすることによって:1回on ';'再度 '='を入力してください。

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;  

Accessのような値:print $hash{level}."\n"

+0

ありがとう、これは私が目指しているものです。しかし、私はまだ他のキーの値を収集することに失敗しています。 print $ hash {palace}は$ hash {level}がうまく動作している間は何も表示しませんが、ダンプを介してすべてが正しいことを確認できます。最後の値だけを印刷できますか? –

+0

文字列内の空白/改行を考慮して編集されました – beasy