2017-12-30 8 views
-1

현재 Perl 및 웹 쿠키가 엉망입니다. HTTP_COOKIE 환경 변수에서 정보를 수집하고 있지만 결과를 정렬 할 수있는 방법에 대해 고민하고 있습니다.웹 쿠키 정렬 env

단순한 "sort {$ cookie}"는 나에게 적합하지만 split 함수를 사용할 때 막혔습니다. 배열을 정렬하는 방법이 있습니까?

데이터를 수집 :

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 ; 

그러나 나중에 추가하는 쿠키 값으로 인해 $ 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을, 박사 : 분할에 일종의

덕분에, 무키

+0

'sort'은 목록에서 작동합니다. 당신의'$ cookie' var은 문자열이므로, 정렬 할 것이 없습니다. 키 이름으로 데이터를 정렬하려면'my @ sorted = sort (split ';', $ cookie)'를 수행하십시오. 그러나이 작업은 사용자가 원하는 작업, 즉 데이터의 일부분을 확인하는 작업과는 무관합니다. – beasy

답변

0

당신은 해시 키와 쿠키 키 이름을 기록하는 hash을 사용할 수 있습니다, 데이터를 두 번 spltting하여 : 한 번 ';' 다시 '='로 변경하십시오.

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"

+0

고마워,이게 내가 원하는거야. 그러나, 나는 아직도 다른 키의 값을 수집하는 데 실패하고있다. print $ hash {palace}는 $ hash {level}이 잘 작동하는 동안 아무 것도 출력하지 않지만, 덤퍼를 통해 모든 것이 정확하다는 것을 확인할 수 있습니다. 마지막 값만 인쇄 할 수 있습니까? –

+0

문자열의 공백/줄 바꿈을 고려하여 편집 됨 – beasy