[Perl] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Потому что мне не требуется объявить новую переменную, а требуется модифицировать существующую?
     
    _________________________
  2. mazaxaka

    mazaxaka Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    да с картинками уже разобрался как открывать и сохранять правильно. а вот с отправкой авы на ету долбаную фотострану не могу неделю допереть уже весь гугл перерыл
     
  3. krypt3r

    krypt3r Elder - Старейшина

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Если файл отправляется через LWP, то, насколько помнится, не нужно грузить картинку (либо другой отправляемый файл) в переменную, а следует указать путь к ней.
     
  4. mazaxaka

    mazaxaka Elder - Старейшина

    Joined:
    15 Feb 2008
    Messages:
    268
    Likes Received:
    35
    Reputations:
    0
    да уже понял. спасибо каими. мозГ перла. всегда мне подсказует когда туплю.
    Code:
    Content_Type => 'form-data',
        Content => 
        [
            avatar => ['./'.$nfile],
        ]
    )->as_string;
    оказывается нужно было убрать переменые.
    теперь новый вопрос. как загрузить рандомный файл из папки, как загружать файл из папки знаю. а вот как сделать чтобы оно брало рандом
     
  5. CTO

    CTO Member

    Joined:
    9 Sep 2011
    Messages:
    75
    Likes Received:
    7
    Reputations:
    0
    #2005 CTO, 10 Jul 2012
    Last edited: 10 Jul 2012
  6. _Spamer_

    _Spamer_ Elder - Старейшина

    Joined:
    3 Feb 2009
    Messages:
    83
    Likes Received:
    140
    Reputations:
    16
    Авторизация на video.yandex.ru, как?(
    Всем привет, написал код, авторизация на самом yandex.ru проходит нормально, но при переходе на video.yandex.ru сессия слетает, и требует заново авторизоваться.
    Code:
    use LWP::UserAgent;
    use HTTP::Cookies;
    use Cwd;
    $| = 1;
    
    $account = 'prunewli985:Iphagenia401605-uz';
    
    
    	my $my_dir = cwd;
    	my $web = new LWP::UserAgent;
    	my $cookie_jar = new HTTP::Cookies;
    	$web->cookie_jar($cookie_jar);
    	$web->agent('Opera/9.80 (Windows 7; U; en) Presto/2.9.168 Version/11.50');
    	$web->timeout(5);
    
    
    
    	($username, $password) = split ':', $account;
        my $url = 'http://passport.yandex.ru/passport?mode=auth&from=video&retpath=http%3A%2F%2Fvideo.yandex.ua%2F%23top';
        my $response = $web->post($url,
        [login => $username,
         passwd => $password,
         twoweeks => 'yes',
         timestamp => '1342556786614'
        ]);
    
        $next = $response->header('Location');
        $responce = $web->get($next);
        $next2 = $response->header('Location');
       $responce = $web->get($next2);
        exit;
    Подскажите, что не так?
     
  7. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Заголовка
    Accept => '*/*'

    не хватает при обращении к video.yandex
     
    _________________________
  8. _Spamer_

    _Spamer_ Elder - Старейшина

    Joined:
    3 Feb 2009
    Messages:
    83
    Likes Received:
    140
    Reputations:
    16
    Спасибо, но ума не приложу откуда ты взял что его не хватает, снифал запросы и нигде его не видел.
     
  9. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    [​IMG]
     
    _________________________
    1 person likes this.
  10. ccoder

    ccoder New Member

    Joined:
    29 May 2012
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Добрый день! Мне нужно выдернуть из текста отдельные предложения, делаю это с помощью split, но выдергиваюстя только те предложения, после которых есть знак пробела, то есть если взять пример:
    Code:
     Предложения номер один. Предложение номер два.Предложение номер три.
    тут выдернеться только первое предложение, остальные два скрипт воспринимает как одно целое предложение. Вот регулярка, которой пользуюсь в фунцкии split:
    Code:
    /([\.\?!]+)\s*([А-Я]+)/g
    Думаю, что проблема в регулярке, но вот какая, не знаю :(
     
  11. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Допустим выдернутся все предложения. А модификатор g в функции split помогает или варнинги в скрипте принципиально отключены? Также интересно послушать зачем использовать круглые скобочки, если это действительно в split подставляется.
     
    _________________________
  12. ccoder

    ccoder New Member

    Joined:
    29 May 2012
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Нет, ошибки включены. А вот насчет split я перепутал, к сожалению :( Вот сам скрипт:
    Code:
    #! /usr/bin/perl -w
    
    open(FILE,"1.txt");
    @file = <FILE>;
    close(FILE);
    $file_string = "";
    foreach $data (@file)
    {
    	$data =~ s/\n//;
    	$data =~ s/([\.\?!]+)\s*([А-Я]+)/$1\n$2/g;
    	$file_string .= $data;
    }
    open(FILE,">2.txt");
    print FILE $file_string;
    close(FILE);
    
    Суть его в том, что он читает какой- то текст из файла; текст в файле разделен на абзацы, поэтому изначально я убираю из каждой строки символ начала строки. Далее с помощью рег. выражения в этой строке ($data) заменяется начало нового предлжения на символ конца строки, в резульатате получается строка ($file_string) из отдельных предложений, которая позже записывается в отдельный файл (2.txt). Суть в том, что в новом файле не все предложения заканчиваются символом конца строки, не понимаю, почему :(
     
    #2012 ccoder, 26 Jul 2012
    Last edited: 26 Jul 2012
  13. CTO

    CTO Member

    Joined:
    9 Sep 2011
    Messages:
    75
    Likes Received:
    7
    Reputations:
    0
    "Вечерело..."
    Это предложение ?
    Есть ли в нем пробелы?
     
    #2013 CTO, 26 Jul 2012
    Last edited: 26 Jul 2012
  14. ccoder

    ccoder New Member

    Joined:
    29 May 2012
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Моё регулярное выражение( см. предыдущий пост ) воспримет это как предложение, если после этого предложения будет идти любая русская заглавная буква. Суть проблемы в том, что рег. выражение не работает, когда между знаком конца предложения и заглавной буквой нет пробела, хотя знак * говорит о том, что пробелов может быть от 0 и больше. Не могу никак понять, почему рег. выражение не работает :(
     
  15. CTO

    CTO Member

    Joined:
    9 Sep 2011
    Messages:
    75
    Likes Received:
    7
    Reputations:
    0
    Не уверен, но может поможет если задать таким способом
    \s{0,}?
     
    #2015 CTO, 26 Jul 2012
    Last edited: 26 Jul 2012
  16. ccoder

    ccoder New Member

    Joined:
    29 May 2012
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Нет, к сожалению не помогло :(
    З.ы. Решение найдено, если кому поможет:
    Code:
    use Text::ToSentences;
    @sentences = @{Text::ToSentences::convert($text)};
    
    Ссылка на сурс: view
     
    #2016 ccoder, 26 Jul 2012
    Last edited: 26 Jul 2012
  17. ccoder

    ccoder New Member

    Joined:
    29 May 2012
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Добрый день! Опять появилась проблема:(
    В программе потребовалась поддержка многопоточнсти, при этом используется подключение к БД (MySql). Для этого был создан глобальный дескриптор подключения к БД. При использовании этого дескриптора в разных потоках вылезала ошибка, для этого я объявил этот дескрпитор вида ":shared". Но теперь выдается седующая ошибка:
    Code:
    Invalid value for shared scalar
    Из доков я понял, что вид ":shared" объявляется только для скаляров, а мой дескритор является объектом класса:(
    Не могу никак решить данную проблему, кроме как создать в каждом потоке свой дескриптор, но при многопоточности это более чем накладно :( Может в perl есть функции, подобные lock в C#?
    P.s. в перл есть фунцкия lock(), но при её использовании опять вылетает ошибка:
    Code:
    lock can only be used on shared values
     
    #2017 ccoder, 27 Jul 2012
    Last edited: 27 Jul 2012
  18. edger

    edger Member

    Joined:
    9 Jul 2011
    Messages:
    52
    Likes Received:
    9
    Reputations:
    1
    Есть скрипт на perl без расширения .pl
    Как его можно запустить в винде? мейби установить какой нибудь эмулятор чего-то?:)
    Заранее благодарю за ответ.
     
  19. cardons

    cardons Elder - Старейшина

    Joined:
    19 Jul 2005
    Messages:
    778
    Likes Received:
    324
    Reputations:
    83
    А какое именно расширение? ) Может у вас cgi ? То его на веб сервер кидайте и запускайте через браузер. А если же просто перл скрипт то ActivePerl скачайте и запускайте )
     
  20. nuxster

    nuxster New Member

    Joined:
    12 Jan 2011
    Messages:
    58
    Likes Received:
    0
    Reputations:
    0
    вывод только части строки которая совпала с regex

    Доброго времени!
    1. Как получить только ту часть строки\элемента массива, которая совпала с регуляркой. К примеру:

    Code:
    @arr = qx/\/sbin\/ifconfig | grep "inet addr:"/;
    foreach (@arr){
        if ($_ =~ m/([\d]{1,3})\.([\d]{1,3})\.([\d]{1,3})\.([\d]{1,3})/){
                print "${_}\n";}
       }
    как вывести не
    Code:
    inet addr:127.0.0.1  Mask:255.0.0.0
    а только
    Code:
    127.0.0.1
    2. В данном случае весь вывод ifconfig присваивается первому элементу массива. Как разбить вывод, что бы он построчно присвоился элементам массива?
     
Thread Status:
Not open for further replies.