﻿<?xml version='1.0' encoding='UTF-8'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Релиб / Веб-программирование / Perl  / Несколько вопросов по Perl______________________ / Latest Posts</title><generator>InstantForum.NET v4.1.4</generator><description>Релиб</description><link>http://www.relib.com/forums/</link><webMaster>robot@relib.com</webMaster><lastBuildDate>Wed, 03 Dec 2008 05:55:17 GMT</lastBuildDate><ttl>20</ttl><item><title>RE: Несколько вопросов по Perl______________________</title><link>http://www.relib.com/forums/Topic870509-18-1.aspx</link><description>Для того чтобы использовать redirect надо подключить модуль CGI, как я и написал:use CGI qw/ :standart/;Но достаточно и location.Теперь про алгоритм. Дело в том что хэдер (загоолвок) можно отправить только один за раз вызывания скрипта (сори за некоторую корявость), то есть если у вас в скрипте идет в самом начале location, то он сразу редиректится будет, если text/html - то все последующие location не запишутся в заголовок а запишутся в content. Тут можно делать так:if(что-то) {print &amp;quot;Location: &lt;br&gt;&lt;br&gt;&amp;quot;;} else {print &amp;quot;Content-Type: text/html&lt;br&gt;&lt;br&gt;&amp;quot;;}Для того чтобы работали эти принты не только из начала скрипта - в начале поставьте:$|=1;это отключит буферизацию.В вашем же случае есть смысл сделать не так, а просто после удачного подключения редиректить на страницу с тегами &amp;lt;meta refresh...&amp;gt; где писать об удачном подключении и редиректить снова. Как во многих популярных форумах после добавления сообщения.</description><pubDate>Tue, 07 Jun 2005 14:19:00 GMT</pubDate><dc:creator>PoizOn</dc:creator></item><item><title>RE: Несколько вопросов по Perl______________________</title><link>http://www.relib.com/forums/Topic870509-18-1.aspx</link><description>При использованииprint redirect(-uri =&amp;gt; $url); Я получаю ошибку:&amp;quot;Undefined subroutine &amp;amp;main::redirect called at /home..... line 40.For help, please send mail to the webmaster (you@yourhost.com), giving this error message and the time and date of the error. &amp;quot;а по поводу второго метода: print &amp;quot;location..&amp;quot;тут следующая проблема:1. прежде всего в самом начале кода я пишу print &amp;quot;ContextType:text/html&lt;br&gt;&lt;br&gt;&amp;quot;если это заменить на print &amp;quot;location...&amp;quot; (опять же в самом начале) то по окончании кода будет сделан редиректесли же я сделаю print &amp;quot;location... в чредине кода, то ничего не произойдет.вобщем у меня такой алгоритм:1. подключаюсь к базе2. если пароль не верный - вывожу сообщение и никуда дальше не редиректюсь3. что-то делаю.4. если 3 успешно, то вывожу сообщение через print &amp;quot;&amp;lt;script&amp;gt;alert(&amp;quot;OK&amp;quot;);..&amp;quot;   после этого редиректюсь на некоторый адрес.Но тут масса проблем: 1) как я говорил если  написать print &amp;quot;ContextType:text/html&lt;br&gt;&lt;br&gt;&amp;quot; в самом начале кода то alert выскакивает.а если print &amp;quot;ContextType:text/html&lt;br&gt;&lt;br&gt;&amp;quot; заменить на print location то алерт не выскакивает и вообще не важно ошибка-нет а идет редирект на другой адрес. это не правильно.2) я не могу в середине кода поставить print location - он просто не работает. он работает только если стоит вместо print &amp;quot;ContextType:text/html&lt;br&gt;&lt;br&gt;&amp;quot;а при попытке заменить print location на print redirect получаю ошибку описанную выше..</description><pubDate>Tue, 07 Jun 2005 14:04:00 GMT</pubDate><dc:creator>californis</dc:creator></item><item><title>RE: Несколько вопросов по Perl______________________</title><link>http://www.relib.com/forums/Topic870509-18-1.aspx</link><description>Насчет web services понял, хотя Perl может почти и все . Работать с удаленными данными по http протоколу - легко, но тут тогда речь не об использовании кода с другого сервера - а об запросах и получении данных - но не кода.P.S Насчет редиректа, поясни задачу которую ты хочешь реализовать. В большинстве своем: если у тебя скрипт без операторов условия, то логика выполнения скрипта с редиректом такая:#!/usr/bin/perl$|=1;делаем все что нам нужноprint &amp;quot;Location: $url&lt;br&gt;&lt;br&gt;&amp;quot;;или как вам советовали в другом посте use CGI qw(:standart);print redirect(-uri =&amp;gt; $url); Хотя смысла в CGI в данном вопросе я не вижу.Все зависит от задачи. Я к примеру работаю с редиректом в основном так:if(что-то) {print &amp;quot;Location:...&lt;br&gt;&lt;br&gt;&amp;quot;;} else {print Content-Type: text/html&lt;br&gt;&lt;br&gt;&amp;quot;;....}В общем зависит от задачи.</description><pubDate>Tue, 07 Jun 2005 09:46:00 GMT</pubDate><dc:creator>PoizOn</dc:creator></item><item><title>RE: Несколько вопросов по Perl______________________</title><link>http://www.relib.com/forums/Topic870509-18-1.aspx</link><description>кстати, а по редиректу как решить ту проблему?</description><pubDate>Tue, 07 Jun 2005 06:33:00 GMT</pubDate><dc:creator>californis</dc:creator></item><item><title>RE: Несколько вопросов по Perl______________________</title><link>http://www.relib.com/forums/Topic870509-18-1.aspx</link><description>Например, такой пример:ты разрабатываешь веб сайт на котором ввозишь город, страну, и он показывает тебе точную карту (вроде map.yahoo.com)у тебя есно нет таких карт и данных! да и место это занимает много. и занимаются картами совсем другие люди. и все это дорого- т.к. делаются они-карты с помощью спутников. поэтому ты просто покупаешь доступ к их сервису где есть карты, классы и методы.далее на своем сайте ты уже просто создаешь прокси того класса который будешь использовать, и передаешь лишь входные данные а на выходе получаешь карту от удаленного веб сервиса.есно этим сервисом ты не владеешь. ты лишь как бы арендуешь доступ к использованию его ф-ий. а уже сами сервисы могут быть либо платными либо бесплатными.</description><pubDate>Mon, 06 Jun 2005 19:04:00 GMT</pubDate><dc:creator>californis</dc:creator></item><item><title>RE: Несколько вопросов по Perl______________________</title><link>http://www.relib.com/forums/Topic870509-18-1.aspx</link><description>нет. это не одно и тоже!то что ставится на свою машину либо на машину хостера где лежит твой проект - это лишь плагины.А тут речь о другом. скажем компания А разрабатывает классы и методы для работы с геокартами. А твоя компания Б разрабатывает некий проект в котором нужны все эти ф-ии. Но ты не разрабатываешь их сам, а твой проект просто &amp;lt;b&amp;gt;удаленно &amp;lt;/b&amp;gt; обращается на совсем другой хост где находятся классы которые тебе нужны. причем обращение идет не &amp;quot;напрямую&amp;quot; а через некоторый &amp;quot;прокси&amp;quot; который создается (в дот нете это утилита wsdl)и который представляет из себя оболочку тех удаленных классов с которыми ты будешь работать</description><pubDate>Mon, 06 Jun 2005 18:48:00 GMT</pubDate><dc:creator>californis</dc:creator></item><item><title>RE: Несколько вопросов по Perl______________________</title><link>http://www.relib.com/forums/Topic870509-18-1.aspx</link><description>На Perl это реализовано через модули. Как правило в стандартную поставку Perl (если версия свежая) входят уже почти все необходимые модули. Те которые не входять - можно либо установить самому, либо просить хостера. На Perl имеется огромное кол-во модулей на все случаи жизни, найти их можно на search.cpan.org. Так что ситуация даже лучше чем с асп, так как эти модули лежат не на каком-то сервере - а на общедоступном архиве.</description><pubDate>Mon, 06 Jun 2005 18:32:00 GMT</pubDate><dc:creator>PoizOn</dc:creator></item><item><title>RE: Несколько вопросов по Perl______________________</title><link>http://www.relib.com/forums/Topic870509-18-1.aspx</link><description>Web Service - это в принципе некоторый класс с набором методов физически находящийся на некотором web server, и в случае если у вас есть доступ, то вы можете его использовать в своей программе/проекте.веб_приложении.Например: есть класс лежащий на неком сервере который предоставляет вам методы для работы с географическими картами и позволяет вам также их получать с сервера-владельца.Поэтому в своем проекте у вас нет необходимости писать все это- вы можете воспользоваться тем что уже готово(бесплатно или за плату).В общем с веб серверами я работал только на .NET (asp.net) , но это не изобретение ms, с веб сервисами можно работать на java.</description><pubDate>Mon, 06 Jun 2005 17:23:00 GMT</pubDate><dc:creator>californis</dc:creator></item><item><title>RE: Несколько вопросов по Perl______________________</title><link>http://www.relib.com/forums/Topic870509-18-1.aspx</link><description>$dbh=DBI-&amp;gt;connect(... {PrintError =&amp;gt;1, RaiseError=&amp;gt;1})в рез-те если ввожу неправильный пароль то ничего не пишется...Здесь есть смысл писать только PrintError, а вторую опцию в ноль, тогда будет писать (в логи веб сервера - если хотите получать в броузер - подключите модуль CGI::Carp qw(fatalsToBrowser)), вторая опция отключает скрипт после любой ошибки. Помимо этого - есть еще глобальные переменные модуля DBI которые так же контролируют ошибки - это $DBI::Err и $DBI::Errstr, если не ошибаюсь. В общем - если хотите серьезно работать с БД - то советую почитать http://search.cpan.org/~timb/DBI-1.48/DBI.pm , модуль предоставляет широкие возможности, в том числе и транзакции и т.п.1. Как работать с web services - незнаю что под этим подразумевается.... Просветите. (я серьезно)Проблема с редиректом. Тут возможно вы не много не првильно решаете задачу, которая требуется. Что конкретно нужно реализовать - может я вам подскажу более правильный алгоритм для Perl</description><pubDate>Mon, 06 Jun 2005 15:48:00 GMT</pubDate><dc:creator>PoizOn</dc:creator></item><item><title>RE: Несколько вопросов по Perl______________________</title><link>http://www.relib.com/forums/Topic870509-18-1.aspx</link><description>1. А как работать с Web Services?2. Дело в дефолтных настройках DBI, нужно при коннекте (если хотите ошибки получать) включать некоторые опции:$dbh=DBI-&amp;gt;connect(... {Print Error =&amp;gt;1, RaiseError=&amp;gt;1})PrintError - выводит сообщения об ошибкахRaiseError - включает строгий кнтроль, то есть если что-то прошло не так - скрипт останавливается и дальше не выполняется (в основном используется для отладки - по умолчанию отключена)тут у мня проблема:сделал таким образом(т.е. добавил PrintError):$dbh=DBI-&amp;gt;connect(... {PrintError =&amp;gt;1, RaiseError=&amp;gt;1})в рез-те если ввожу неправильный пароль то ничего не пишется....3. вторая проблема с редиректом:как и говорилось выше вместо print &amp;quot;ContextType:....&amp;quot;в самом начале я написал print &amp;quot;location: url&amp;quot;далее я делаю что-то и в конце завершаю:print &amp;quot;&amp;lt;script&amp;gt;...alert('TEST');&amp;lt;/script&amp;gt;&amp;quot;;Так вот, если в первой строке убрать location и оставить просто contexttype то выскочит alert с фразой ТЕСТ.Но мне надо чтобы после этого страница редирекнлась на другой урл.в рез-те, если я верну location  я получаю что страница редиректится но фраза &amp;quot;ТЕСТ&amp;quot; в alert не выводится...Как решить эту проблему?</description><pubDate>Mon, 06 Jun 2005 14:11:00 GMT</pubDate><dc:creator>californis</dc:creator></item></channel></rss>