![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Twister |
|
||||
|
Unregistered |
Собсна,
есть некий массив @posts_arr есть подпрограмма
Вызываю
Ну и не пашет, где грабли ? |
||||
|
|||||
| Vaneska |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 141 Регистрация: 15.3.2005 Где: Москва Репутация: 3 Всего: 4 |
Грабли скорее всего в огороде
Попробуй так:
Это сообщение отредактировал(а) Vaneska - 15.6.2005, 13:19 --------------------
http://isokolov.blogspot.com/ |
|||
|
||||
| TwiSteR |
|
||||
![]() Кибер красавчег ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 15.6.2005 Где: World->Russia Репутация: нет Всего: 2 |
Vaneska
Аха сенкс, вроде работает так а теперь как его перебрать ? Т.е. в php я бы так перебрал
Пробую так, но получается все тот же массив
--------------------
|
||||
|
|||||
| korob2001 |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Здравствуй!
Проблема в том, что ты пишешь на манер PHP. Просто запомни, в Perl массив всегда выглядит так: @arr, если обращаешься только к одному елементу массива, тогда так: $arr[1]=10;. Теперь посмоти на первую строку подпрогаммы test. В ней ты пытаешься присвоить скалярной переменной $mass срез массива, а не весь массив, потому как ты указал индекс, но ты его не получишь, потому как он у тебя в скалярном контексте. Так же прошу обратить внимание на то, что @mass и $mass, а абсолютно разные вещи, хотя они хранятся в одной и той же таблице имён. Вобщем подправь свой код:
Вообще привыкай всегда пользоваться прагмой use strict. Теперь о переборе массива:
Ты опять забыл, что Perl - это не PHP, ты пытаешься перебрать переменную, которая может содержать только одно значение. Для примера, подправим подпрограмму test, о которой говорили выше, для более понятного обращения к ней, назовём её sum и сделаем так, что бы она получала массив цифр, а возвращала результат их сложения. Т.е. пишем так:
Тебя может немного смутить эта сторока: $res += $_ foreach ( @nums );, на самом деле её можно было бы записать и в более длиной форме, например:
Просто второй вариант менее компактен ,потому я воспользовался не им. Но ты можешь писать так, как тебе больше нравится. Удачи. ЗЫ: Вообще-то я тебе просто показал как передавать массив в подпрограмму, но их всё же лучше передавать по ссылке, так как показал тебе Vaneska. Но до тех пор пока ты не разобрался с массивами, скалярами, хешами и подпрограммами, врядле ты поймёшь работу с ссылками. Хотя, может и поймёшь, но опять же, их нужно использовать там, где их нужно использовать. Это сообщение отредактировал(а) korob2001 - 15.6.2005, 21:34 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||||||
|
|||||||||||||
| TwiSteR |
|
|||
![]() Кибер красавчег ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 15.6.2005 Где: World->Russia Репутация: нет Всего: 2 |
korob2001
Огромное спасибо, за четкое разъяснение. P.S> Зыж, ну что же поделать, привык я к пхп. Придется переучиваться --------------------
|
|||
|
||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
В Perl префиксы переменных выбраны не случайно, очень даже логично. Например:
В Perl массивы и хеши, могут содержать только список скаляров, но никак не список списков, потому при обращении к элементам массива или хеша, нужно использовать префикс скаляра, так как мы обращаемся к скаляру, т.е. выглядеть это будет примерно так:
Думаю теперь тебе легче будет понять, как и когда в Perl нужно использовать тот или тной префикс. ЗЫ: Главное не пытайся запомнить, пытайся понять, как думает Perl. Дерзай и всё получится. Удачи. Это сообщение отредактировал(а) korob2001 - 15.6.2005, 22:05 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| TwiSteR |
|
|||
![]() Кибер красавчег ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 15.6.2005 Где: World->Russia Репутация: нет Всего: 2 |
Да, спасибо ещё раз --------------------
|
|||
|
||||
| TwiSteR |
|
||||
![]() Кибер красавчег ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 15.6.2005 Где: World->Russia Репутация: нет Всего: 2 |
korob2001
Вопрос если можно. Коректна ли будет такая запись подпрограммы и вернет ли она то что мне надо
и вот такая
Это сообщение отредактировал(а) TwiSteR - 16.6.2005, 07:46 --------------------
|
||||
|
|||||
| korob2001 |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Первая не будет работать.
1. Вот это:
исправь на такую:
2. Возникнут трудности если в базе данных много значений, вот посмотри сам на эту строку:
Зачем ты задаёшь индекс массива, такой же как и его значение??? Допустим ты выбрал из базы данных запись, где id=100000. В итоге присвоив только одно значение, такое:
Внимание!!! В коде выше мы присвоили только одно значение, но Perl после такой бодяги выделил память для 100000 значений, другими словами, задав такой индекс, ты создал массив, который состоит из 100000 значений, хотя они все пустые, кроме последнего, но это не значит что они не отняли у тебя драгоценную память. Никогда не задавай индекс больше чем был предидущий. А так же, не понятно зачем хранить число 100000, в 100000 элементе. Данные повторяются, а это не есть гуд, опять же для памяти. ==================================== Вторая не доконца написана, но вот эта строка:
явно лишняя. Вот здесь:
убери круглые скобки, можешь конечно их оставить, но они не нужны в данном случае, только если ты работаешь с прототипами. Удачи. Это сообщение отредактировал(а) korob2001 - 16.6.2005, 12:10 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||||||
|
|||||||||||||
| TwiSteR |
|
||||||
![]() Кибер красавчег ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 15.6.2005 Где: World->Russia Репутация: нет Всего: 2 |
Аха значится
Необязателен, в пхп такие вещи объявляются как globals Далее:
так вот в самом начале есть 2 массива @posts_arr = (); @forums_arr = (); они должны накапливать данные. Правильно ли будет вот так в них загонять данные ?
Это сообщение отредактировал(а) TwiSteR - 16.6.2005, 13:14 --------------------
|
||||||
|
|||||||
| korob2001 |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Просто ты уже извлёк параметр вот зжесь:
Он хранится в первом элементе массива @fids, незачем его извлекать повторно.
нет, таким способом ты ничего не накопишь. Ладно, давай сначала и по порядку. Ответь на эти вопросы: Зачем ты подключаешь модули Masql и Net::SMTP ? Чего ты хочешь добиться от программы? -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||||||
|
|||||||||
| TwiSteR |
|
|||
![]() Кибер красавчег ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 15.6.2005 Где: World->Russia Репутация: нет Всего: 2 |
korob2001 Привет ещё раз
спасибо за поддержку так вот Вообще я переписываю скрипт с php на perl, только не спрашивай зачем далее Вот мой код
Мне нужно накопить эти два массива, один должен содержать id топиков, а второй id форумов Так вот, потом эти два массива передать ещё двум функциям которые переберут их и выполнят некоторые манипуляции над таблицами. P.S. Надеюсь понятно изложил свою проблему --------------------
|
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Юзай DBI.
Если не секрет, что ты с ними будешь делать? Может их даже не стоит грузить в память, а делать то, что-то на каждой итерации цикла while??? Удачи. Это сообщение отредактировал(а) korob2001 - 17.6.2005, 01:36 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| TwiSteR |
|
||||||||
![]() Кибер красавчег ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 15.6.2005 Где: World->Russia Репутация: нет Всего: 2 |
korob2001
Ну DBI модулем как пользоваться я знаю
Этот скрипт для форума, удаление постов на перемодерации,
Ты имеешь ввиду обойтись без вот этих подпрограмм ?
и потом прокатит ли у меня так ? :
--------------------
|
||||||||
|
|||||||||
| TwiSteR |
|
|||
![]() Кибер красавчег ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 15.6.2005 Где: World->Russia Репутация: нет Всего: 2 |
korob2001
Посмотри плиз и выскажись вот по такому скрипту
Это сообщение отредактировал(а) TwiSteR - 17.6.2005, 09:19 --------------------
|
|||
|
||||
| korob2001 |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Вот эти три запроса объединить в один сможешь??? Сам посмотри, как они похожи, меняется только условие запроса к базе, даже обращаемся к одной и той же таблице, за одними и теми же данными. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
||||
|
|||||
| TwiSteR |
|
|||
![]() Кибер красавчег ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 15.6.2005 Где: World->Russia Репутация: нет Всего: 2 |
Нежелательно т.к. в этом случае станет невозможным использование индексов, и он каждый раз будет всю базу перебирать. Ну что скажешь по коду ? --------------------
|
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
В том-то и дело, что желательно. В твоём случае перебор будет происходить 3 раза подряд. Ну а что касается кода, то его можно уменьшить раза в 3-4 и работать он будет быстрее во столько же раз. -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| TwiSteR |
|
|||
![]() Кибер красавчег ![]() Профиль Группа: Участник Сообщений: 231 Регистрация: 15.6.2005 Где: World->Russia Репутация: нет Всего: 2 |
Korob спасибо огромное за реальную помощь !!!
--------------------
|
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |