2013-10-01 3 views
-3
my $trefer = $ENV{HTTP_REFERER}; 
my $gk1 = substr($trefer, -4); 
my $gk2 = ".swf"; 
my $antigk = $gk1; 

if ($gk1 = $gk2) { 
    $antigk = $trefer; 
} 
else 
{ 
    $antigk = $link; 
} 

이 코드에는 무슨 문제가 있습니까? 예를 들어 referal 작동하지 않습니다이 site.com/2nujroj49lni 경우, 그것은 나에게 $link를 표시해야하지만, 대신 나에게 보여 $refer"if"가 작동하지 않는 이유는 무엇입니까?

이유는 무엇입니까? 나는 그것을 얻지 않는다

만큼이나. .swf 나는 추천이 아닌 링크를 받아야한다. 나는 인터넷을 통해 검색했고, 합법적 인 것처럼 보인다. 내가 볼 수는 있지만 여전히 작동하지 않는 오류는 없습니다.

+0

그렇게 생각 다음에해야하는 경우에서 마지막 4 자 추천은 없습니다. swf show link swf show .. referal .. – user2723212

+0

당신의 이전 질문에 이미 답을주었습니다. 더 조심해야합니다. – toolic

+0

"If"가 정상적으로 작동 중입니다. 펄 (Perl) 연산자가 망가 졌음을 이해하는 것입니다. 비교 연산자 ('eq')가 필요한 곳에 대입 연산자 ('=')를 사용하고 있습니다. –

답변

9
if ($gk1 = $gk2) 

은 항상 true입니다. 그것은 임무가 아니라 비교입니다.

if ($gk1 == $gk2) 

을하지만, 당신이해야 펄 그래서 그들은 문자열을 위치 : : 그들은 숫자 인 경우에, 당신이 원하는 것 ..

if ($gk1 eq $gk2) 
+4

+1하지만 질문의 코드가 OP의 실제 코드 인 경우 하위 문자열이 동일한 지 비교하는 것이 아니라'if ($ trefer = ~ m/\ swf $ /)'라고 쓰는 것이 좋습니다. – ruakh

+0

사실,하지만 저의 목표는 작성한 코드에 대한 혼란을 해결하는 것이 었습니다. –

+0

@PaulRoub : pedantic 인 것은 "항상 사실이 될 것"입니다. '$ gk2'가 false, 즉 빈 문자열이나 0으로 해석되면 할당 결과는 false가됩니다. – cdarke

관련 문제