| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > Поясните функции PUSH и POP,PLS |
| Автор: Marriage 5.12.2004, 14:16 |
| Задали курсовую по СПО, достался вариант с PERL. Я уже кое-что прочитал, но кое-чего не могу найти Есть ли в Perl'е функции Chomp,pop,push... Если есть , то что они делают. По POP и PUSH в принципе сказать могу, что это такое, но как это в перле используется . И если возможно, то примеру этих функций был бы просто рад. ЗЫ А что такое .= ??? Как в С или нет ??? PLEASE HELP !!!!!!!!!!!!!!!!!!!!!! |
| Автор: Secandr 5.12.2004, 14:33 |
| $a.='aa' это то же что $a=$a.'aa'; pop - вырезать первый элемент массива насполько помню push - запихнуть список в массив (добавление элементов) Chomp - кажется обрезание ентера на конце |
| Автор: dimes 5.12.2004, 16:29 | ||||
Нет, это shift так делает а pop последний вырезает
До но только chomp и режет последний '\n' в виндах перевод '\r\n' |
| Автор: korob2001 5.12.2004, 16:36 | ||||||||||||||||||
Есть. chomp - удаляет из конца переданной ей строки "терминатор", который в текущий момент установлен в переменной $/, по умолчанию, это символ перевода строки \n. В более ранних версиях Perl использовали chop, но он менее удобный, чем chomp, потому как удаляет любой символ с конца строки. Пример:
Например юзер ввел имя Вася. По идее мы хотели бы получить такую строку: Вася, hello! но на самом деле получим такой результат: Вася , hello! Вся беда в том, что когда юзер ввёл имя он нажал клавишу ENTER, для передачи имени в программу, другими словами в программу было передано имя юзера за которым следует символ перевода строки \n. Вот тут нам и понадобится chomp. Так теперь будет выглядеть наш код:
Теперь мы получим то, что хотели. Но можно было бы записать и более компактно, например так:
Хотя по большому счёту это не важно. ==================================================== pop - удаляет из массива последний элемент, точнее было бы сказать что не удаляет, а вырезает, потому как этот вырезанный элемент можно сохранить в переменной. Допустим у нас есть массив @names c именами, и мы хотим удалить последнее имя в массиве и вместо него вставить другое. Кстати обрати внимание на то, что в примере ниже так же используется и push:
Из примера видно, что push, наоборот, вставляет список в конец массива. Заметь, СПИСОК. С помощью push, можно добавить несколько элементов в конец массива. Например так:
В итоге в конце массива @names, добавится 4 элемента, в том порядке, в каком они написаны в push. ====================================================
Я не знаю C. Вобщем в Perl это краткая запись конкатенации. Например у нас есть переменная с именем пользоаптеля. И мы хотим к имени добавить строку ", hello!", как в примере выше. Для примера я воспользуюсь кодом, которым пытался пояснить что такое chomp:
Здесь была использована та конкатенация о которой ты спрашивал, она аналогична такой записи:
Только, краткий вариант будет работать быстрее, так как пременная $name вычисляется только 1 раз, а во втором варианте 2 раза. Удачи. Мля.... Пока писал у меня курица сгорела. |
| Автор: Marriage 16.12.2004, 14:46 |
| А еще такой вопрос : Насколько правильн опонял из краткого курса, то объяления как в С или Паскале в Перле нет. ТАк вот, такой вопрос. Если был оператор : $qwerty:=123; ....................... А потом $qwerty_second=Chomp($qwerty); Ошибка при компиляции выскочит ??? my $last_name = pop @names; Может my $last_name = pop( @names); ??? И что такое "my" ???? |
| Автор: chaos 16.12.2004, 15:08 | ||||||||
В твоем случае будет ошибка компиляции тк $qwerty:=123; из-за : Дальше chomp заметь не Chomp, функция возвращает общее кол-во символов, удаленных из всех переданных ей аргументов, а удаляет она с конца символы каторые совпадают с символами содержащимися в переменной $/. Вот тебе наглядный пример:
В твоем примере должен быть 0. Это первое. Второе:
Можно со скобками можно без, как тебе нравится Третье: my - это как раз и есть интересующие тебя обявления, только без конкретизации типа как в С и паскале, и вообще my объявляет перечисленные переменные как локальные для текущего блока, пример :
|
| Автор: chaos 17.12.2004, 12:29 |
| еще вопросы ??? |
| Автор: Marriage 19.12.2004, 01:01 | ||
ЕСть ... Пример двумерного массива ... Пример операторов IF (полная форма с ELSE ), While и Unless .... Оччень надо .... |
| Автор: Secandr 19.12.2004, 09:39 |
| Marriage А книжку посмотреть? массив: $a[1][2]=1; хешь: $b{'a'}{'b'}=2; А что значит пример операторов? if/unless (условие) {делать}elsif else{делать} делать if/unless условие; while (EXPR) {} for ($i = 2; $i < 5; ++$i) { print $i; } |
| Автор: cybear 19.12.2004, 11:17 |
| двумерных массивов нету - есть Array of Arrays - смотри man perllol - там очень все хорошо прописано, с примерами. |
| Автор: Marriage 19.12.2004, 20:30 | ||
Немае ... А покупать - денег лишних нет |
| Автор: Marriage 21.12.2004, 01:00 |
| People !!! Кинте кто-нить исходникна перле большой (на пару печатных страниц), проверить лексический анализатор надо ... |
| Автор: chaos 21.12.2004, 07:46 | ||
пойдет такое |
| Автор: Marriage 21.12.2004, 09:26 |
| chaos Сенкс. |
| Автор: chaos 22.12.2004, 06:53 |
| ЗЫ А что такое .= ??? Как в С или нет ??? чето не припоминаю такую операцию(точка) в с |
| Автор: Marriage 22.12.2004, 21:09 | ||||
Имелось в виду то, что в С тоже могла быть .=, а по С у меня доки есть. Там посмотреть. Извините, если не так понял ЗЫ Чем unless от while отличается ??? Добавлено @ 21:12
Я имел ввиду то, что можно было бы поискать описание этой поерации присваивания в доках по С З.Ы. while(Условие){СписокОператоров}| unless(Условие){СписокОператоров}| В чем разница ??? |
| Автор: korob2001 22.12.2004, 21:21 | ||
Всем. unless - это условный оператор, тоже что и if, только выполняется в том случае, если условие ложно. Но мне что-то подсказывает что тебя интересует until, а не unless. until - аналогичен while, только цикл выполняется пока условие ложно. |
| Автор: Marriage 22.12.2004, 22:01 |
| korob2001 Нет, меня интересует именно unless Спасибо ... |
| Автор: Marriage 9.1.2005, 09:37 |
| ВСЕМ СПАСИБО ЗА ПОМОЩЬ. СДАЛ КУРСОВОЙ НА 5. Ура !!!!!!!!!!!!!!! ыыыыыыыыыыыыыыыыыыыыыыыыыыыы |
| Автор: korob2001 11.1.2005, 15:19 | ||
Поздравляю. А у меня 17 января экзамен по VB6.0 |