Perl получает ошибку с Refferrer

0
my $refer = $ENV{HTTP_REFERER};
 my $gk1 = substr($str1, -4); 
if ($gk1 = .swf) { my $antigk = "gk detected"; } 
else 
{ my $antigk = $link; }

что не так с этим кодом? Я получаю некоторые ошибки после его редактирования: |

это мой первый код perl, поэтому: | Я не знаю, что я сделал неправильно: |

может быть, из-за этого

my $antigk

?

THIS is my new error:
Software error:

Global symbol "$str1" requires explicit package name at index_dl.pm line 680.
syntax error at index_dl.pm line 682, near "= ."
syntax error at index_dl.pm line 683, near "else"
Global symbol "$antigk" requires explicit package name at index_dl.pm line 684.
Global symbol "$direct_link" requires explicit package name at index_dl.pm line 684.
syntax error at index_dl.pm line 727, near "}"
Can't use global @_ in "my" at index_dl.pm line 731, near "= @_"
syntax error at index_dl.pm line 735, near "}"
syntax error at index_dl.pm line 761, near "}"
syntax error at index_dl.pm line 779, near "}"
index_dl.pm has too many errors.
For help, please send mail to this site webmaster, giving this error message and the time and date of the error.

Status: 500 Content-type: text/html
Software error:

[Wed Oct  2 20:40:40 2013] fast_index_dl.cgi: Global symbol "$str1" requires explicit package name at index_dl.pm line 680.
[Wed Oct  2 20:40:40 2013] fast_index_dl.cgi: syntax error at index_dl.pm line 682, near "= ."
[Wed Oct  2 20:40:40 2013] fast_index_dl.cgi: syntax error at index_dl.pm line 683, near "else"
[Wed Oct  2 20:40:40 2013] fast_index_dl.cgi: Global symbol "$antigk" requires explicit package name at index_dl.pm line 684.
[Wed Oct  2 20:40:40 2013] fast_index_dl.cgi: Global symbol "$direct_link" requires explicit package name at index_dl.pm line 684.
[Wed Oct  2 20:40:40 2013] fast_index_dl.cgi: syntax error at index_dl.pm line 727, near "}"
[Wed Oct  2 20:40:40 2013] fast_index_dl.cgi: Can't use global @_ in "my" at index_dl.pm line 731, near "= @_"
[Wed Oct  2 20:40:40 2013] fast_index_dl.cgi: syntax error at index_dl.pm line 735, near "}"
[Wed Oct  2 20:40:40 2013] fast_index_dl.cgi: syntax error at index_dl.pm line 761, near "}"
[Wed Oct  2 20:40:40 2013] fast_index_dl.cgi: syntax error at index_dl.pm line 779, near "}"
[Wed Oct  2 20:40:40 2013] fast_index_dl.cgi: index_dl.pm has too many errors.
Compilation failed in require at ./fast_index_dl.cgi line 53.
For help, please send mail to this site webmaster, giving this error message and the time and date of the error.
Теги:

3 ответа

1
Лучший ответ

Вероятно, у вас есть это в верхней части вашего файла index_dl.pm:

use strict;

Это означает, что вам нужно объявить каждую переменную с my прежде чем использовать ее:

my $str1;

Вероятно, вы хотите объявить $antigk перед $antigk if-else и, возможно, вам действительно нужно:

my $antigk = $link;
if ($gk1 eq '.swf') { $antigk = "gk detected"; } 
else 
{ $antigk = $link; }
  • 0
    хорошо, я заменил его и получил это: ссылка другая ошибка :(
  • 0
    Я не мог просмотреть вашу ссылку. Вы должны обновить свой вопрос.
Показать ещё 2 комментария
1
# In this line you store the HTTP referer in the variable $refer
my $refer = $ENV{HTTP_REFERER};

# Then, in this link you take a substring of the variable $str1.
# But you don't have a variable called $str1.
# Perhaps you actually wanted to take a substring of $refer?
my $gk1 = substr($str1, -4); 

# This next line will be a syntax error because you need to quote
# strings (and .swf is a string. This should be '.swf'.
# Also, you are using '='. This is the assignment operator. This
# will set $pgk1 to the value '.swf'. That not what you want to do.
# You want to compare $pgk1 and '.swf'. For that you need the comparison
# operator - which is 'eq'.
# So this whole line should be:
# if ($gk1 eq '.swf') {
if ($gk1 = .swf) {
  # It good that you are declaring $antigk using 'my'. But 'my' only
  # works within a code block. So you're setting $antigk here, but the
  # value will be lost as soon as you pass the end of the code block
  # (which is the '}' on the very next line).
  # Better to declare $antigk (with 'my $antigk') before the 'if' statement.
  my $antigk = "gk detected";
} else {
  my $antigk = $link;
}

В общем, вы делаете некоторые основные ошибки программирования здесь. Я предполагаю, что вы думаете, что лучше учитесь, перепрыгивая в проблему, и Googling за помощью. Я не думаю, что этот подход работает на вас. Я настоятельно рекомендую поговорить пару дней, чтобы начать работу с книгой Perl для начинающих (например, "Learning Perl"), прежде чем продолжить этот проект.

0

Помимо инструментального ответа, я думаю, вы должны изменить эти строки:

my $refer = $ENV{HTTP_REFERER};
my $gk1 = substr($str1, -4); 

к этим:

my $refer = $ENV{HTTP_REFERER};
my $gk1   = substr($refer, -4); 
#                  ^^^^^^

Ещё вопросы

Сообщество Overcoder
Наверх
Меню