Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Не работает проверка условия


Автор: stalker2000 20.1.2014, 13:07
Добрый день. Стоит простейшая задача: проверить урл и в случае несоответствия заданному перенаправить в нужное место. Для начала всё только на экран, без редиректов.
Пишу:
Код

#!/usr/bin/perl

$IWE_cmdl = $ENV{REQUEST_URI};

print "Content-type:text/html\r\n\r\n<pre>";
$IWE_cmdl = "/%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B3%D0%B5%D1%80%D0%B1%D0%B0/";
#$IWE_cmdl = "/создание_герба/";
print "$IWE_cmdl\n";

if($IWE_cmdl ne /^\/%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B3%D0%B5%D1%80%D0%B1%D0%B0/)
#if($IWE_cmdl ne /^\/создание_герба/)
{
  print "Status: 301 Moved Permanently\n";
  print "Location: http://site/%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B3%D0%B5%D1%80%D0%B1%D0%B0/\n\n";
  exit;
}
print "yes, here!";

Результат: всегда выполняется блок if. Подскажите, в чём ошибка?  smile 

Автор: krypt3r 20.1.2014, 13:15
ne — оператор сравнения двух строк. Он не работает с регулярками.
PS. Не вижу use strict

Автор: Bulat 20.1.2014, 13:36
вместо ne, ставь !~ - то же самое что и ne, и !=, и <>, только для регэкспов

Автор: stalker2000 20.1.2014, 13:48
Помогло, спасибо. Тяжковато вначале, в трёх соснах путаешься )))

Пошел читать про use strict smile

Автор: svlary 12.8.2014, 19:20
У меня задача ещё проще.... Но тоже - не работает проверка условия! Я в полном непонимании... Итак, есть простейший условный оператор:

Код

if ($wrk1 ne wrk2) {
    no_name("Введите название дня недели по русски -$wrk1-$wrk2-");
}


Внутри CGI скрипта. Даже если строки совершенно одинакоые, То if говорит, что они РАЗНЫЕ!. Функция no_name (...)  создаёт html документ, в котором генерируется такой код:

Код

<title>Введите название дня недели по русски -Вторник-Вторник-</title>


Даже самым невооружённым глазом видно, что строки - совершенно одинаковые! Почему, при этом, услови ne есть истина - я не понимаю. Есть маленькая зацепка...  Переменную $wrk1 скрипт выбирает из запроса html тега <forma>,

Код

$wrk1 = $FORM{'weekday'};
chomp($wrk1);


а переменная $wrk2  инициализируется константой из самого текста скрипта:

Код

@weekday_name = ("Воскресенье", "Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота");
$weekday_num = (localtime) [6];
$wrk2 = $weekday_name[$weekday_num];
chomp($wrk2);


Следует заметить, что и сам скрипт и html форма набраны в кодировке utf-8 и эта кодировка явнв прописана и на страничке формы и на генерируемой скриптом страничке.

Что я только не делал!!!  В разных комбинациях использовал use locale; /  use utf8; / use encoding 'utf8'; / use feature 'unicode_strings'; / use Encode 'decode_utf8'; и тд. Ставил  chomp и убирал... Использовал lc() и  \L...

Ничего не помогает! В чём может быть дело ?!

Автор: Bulat 13.8.2014, 08:16
Цитата(svlary @  12.8.2014,  19:20 Найти цитируемый пост)
if ($wrk1 ne wrk2) {


так может $wrk ne $wrk2 ?? 

Автор: svlary 13.8.2014, 17:06
Цитата(Bulat @  13.8.2014,  08:16 Найти цитируемый пост)
так может $wrk ne $wrk2 ??  


БЛ-И-И-И-И-Н !!!!

Верно говорят, что труднее всего искать самые глупые ошибки smile!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)