Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Perl


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2267
∙ повысить рейтинг »
Жерар
Статус: Студент
Рейтинг: 476
∙ повысить рейтинг »
Хватов Сергей
Статус: Профессионал
Рейтинг: 417
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Perl (Перл)

Номер выпуска:128
Дата выхода:24.02.2011, 02:30
Администратор рассылки:Калашников О.А. (Руководитель)
Подписчиков / экспертов:133 / 28
Вопросов / ответов:3 / 6

Вопрос № 51911: Здравствуйте эксперты, у меня следующее: Программа должна считывать несколько слов в массив, затем выдать количесво элементов, и затем, распечатать все введенные элементы... для заполнения массива я использую оператор <STDIN>, это у мен...


Вопрос № 45230: Здравствуйте Эксперты. В деле с perl я новичек(только начинаю изучать его), поэтому у меня вопрос: Как установить модуль для perl (я пользуюсь денвером)? Я скачал модуль .tar.gz (модуль GD) - а куда его распаковавыть и как инсталировать н...
Вопрос № 37078: Здрысть, уважаемые эксперты! Пишу GCI-скрипт на perl. Внутри скрипта есть две строковых переменных $str1 и $str2. Одна из них читается из файла, другая от юзера. Слова вводятся на английском без пробелов и спецсимволов. В обоих переменных слово о...

Вопрос № 51911:

Здравствуйте эксперты, у меня следующее:
Программа должна считывать несколько слов в массив, затем выдать количесво элементов, и затем, распечатать все введенные элементы...
для заполнения массива я использую оператор <STDIN>, это у меня получается, так же получается вывести все элементы массива на экран... но вот подсчитать колличество слов в массиве не получается, насколько мне известно это делается путем присваевания скалярной переменной всего массива (то бишь массив в скалярном контексте), но вот у меня, после того как я введу 5 слов, пишет что в массиве только 2, почему??? (заканчиваю ввод слов путем нажатия ctr+z, т.е. конец строки) листинг примерной программки в приложениии.
Всем спасибо за внимание.

Отправлен: 12.08.2006, 02:22
Вопрос задал: Lperw
Всего ответов: 3
Страница вопроса »


Отвечает dianacode (Практикант) :
Доброе время суток, Lperw

эта проблема - не проблема - подскажите перл как обращаться с переменной - ответьте ему что это скаляр - а именно :

$q=@words+0;

или

$q=$#words;

вот и всё

с уважанием, удачи

-----
there is more than one way to do it

Ответ отправил: dianacode (Практикант)
Ответ отправлен: 12.08.2006, 02:40

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 111324 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает -OC- (Специалист) :
    Здравствуйте, Lperw!
    начнем с простого - с размера массива.
    вы делаете правильно , т.е. присвоение скаляру массива всегда дает его размер.
    но более "красивым" считается использование функции scalar.
    $q = scalar(@words);
    Но ошибка у вас скорее всего не в получении размера массива, а в его формировании.
    А почему вы не пользуетесь отладкой? Я не говорю об встроенном отладчике, но хотя бы контролировать значения вводимые с STDIN , а тем более в массив.После ввода просто выведите построчно ваш массив( т.е. каждый элемент массива - новая строка) и вы поймете почему у вас размер не совпадает с требуемым.
    ИМХО ошибка у вас именно вот здесь - @words=;. Так не делается. Вы должны четко знать каким образом будет осужествлятьсяя ввод и что будет являться элементом массива т.е. при вводе слов что будет разделять их на элементы массива пробелы или перевод строки.
    Если каждое слово будет вводиться с новой строки, то для этого лучший вариант такой(см. приложение). Если же в каждой строке будет по нескольку слов и их так же надо разбить на элементы, то приведенный код нужно только немного модифицировать с учетом разбиения строки на подэлементы , используя split с соответствующим разделителем вместо $_ в push. См. вариант 2 в приложении . Этот вариант более универсален и его можно модифицировать под свои нужды. Он работает когда каждый элемент массива- новая строка и отделенные друг от друга пробелом слова в строке. Т.е. при таком вводе :
    hfwfhoei
    fhdslhf hfskdjhfsd sedfuefj
    hfsih dihfsdi
    это будет 6 элементов.

    надеюсь что об"яснил понятно. Извиняюсь за некоторую сумбурность.

    Приложение:
    Украина, Харьков
    ICQ # 48315257

    Ответ отправил: -OC- (Специалист)
    Ответ отправлен: 12.08.2006, 14:09

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 111390 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Хватов Сергей (Профессионал) :
    Здравствуйте, Lperw!

    words=<STDIN>;
    считывает весь файл, разбивая его на строки. Так что вы считаете не слова, а строки.
    Попробуйте так:

    Приложение:
    Россия, Санкт-Петербург
    Абонент Skype: C.XBATOB

    Ответ отправил: Хватов Сергей (Профессионал)
    Ответ отправлен: 14.08.2006, 10:21

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 111613 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 45230:

    Здравствуйте Эксперты.
    В деле с perl я новичек(только начинаю изучать его), поэтому у меня вопрос:
    Как установить модуль для perl (я пользуюсь денвером)?
    Я скачал модуль .tar.gz (модуль GD) - а куда его распаковавыть и как инсталировать незнаю. Посмотрел статьи в инете но так ничего и не понял. Там восновном про shell(ssh) установку на сервере и про установленную версию activeperl для windows, а у меня activeperl "только для денвера" (тоесть интегрирован в денвер и поэтому нет ничего типа c:\program files\activeperl\...).
    Заранее благодарен.

    Отправлен: 05.06.2006, 10:38
    Вопрос задал: Redcap
    Всего ответов: 1
    Страница вопроса »


    Отвечает -OC- (Специалист) :
    Здравствуйте, Redcap!
    1. Для установки модулей perl для windows пользуйтесь утилиткой PPM- она идет в стандартной установке ActivePerl от ActiveState и находится там же где и сам Perl. Если вы не знаете куда установлен ваш Perl То воспользуйтесь поиском (ищите например perl.exe) .
    2. Что касается модуля GD , то GD.pm это всего лишь интерфейс к libgd. Т.е. у вас уже должна быть установлена библиотека GD (http://www.boutell.com/gd/ ) и скорее всего понадобиться libpng (http://www.libpng.org/pub/png/libpng.html ). И только тогда вы сможете пользоваться модулем GD.pm Украина, Харьков
    ICQ # 48315257

    Ответ отправил: -OC- (Специалист)
    Ответ отправлен: 05.06.2006, 12:07

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 100872 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Вопрос № 37078:

    Здрысть, уважаемые эксперты!
    Пишу GCI-скрипт на perl. Внутри скрипта есть две строковых переменных $str1 и $str2. Одна из них читается из файла, другая от юзера. Слова вводятся на английском без пробелов и спецсимволов. В обоих переменных слово одинаковое, но, когда пишу
    if($str1 ne $str2) {...}, то этот ифец срабатывает, говоря о том, что строки разные, хотя они одинаковые. В чём гвоздь? Как лечить?

    Отправлен: 09.03.2006, 12:09
    Вопрос задал: Дрищев Василий
    Всего ответов: 2
    Страница вопроса »


    Отвечает Лучников Юрий Владимирович :
    Здравствуйте, Дрищев Василий!

    А гвоздь в том, что текстовый файл имеет вид:
    string1\n
    string2\n
    ..

    То есть вы читаете файл со спец-символами, а строка, введенная вручную, не имеет их...

    Как лечить? Отфильтруйте символы конца строки функцией chomp().
    Пример:
    chomp $str1, $str2;
    if($str1 ne $str2) {...},


    Успехов!

    Приложение:

    Ответ отправил: Лучников Юрий Владимирович
    Ответ отправлен: 09.03.2006, 14:19

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 87192 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Muad Dib (Х Заблокирован) :
    Здравствуйте, Дрищев Василий!
    обычно if("$str1" ne "$str2") {...}, а разница скорее всего в спецсимволах.
    -----
    Use Linux - be free!

    Ответ отправил: Muad Dib (Х Заблокирован)
    Ответ отправлен: 09.03.2006, 14:21

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 87193 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    подать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное