IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> как перестать беспокоиться и начать программировать на перле
afterstep
сообщение 17.10.2007, 11:32
Сообщение #1


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



Язык программирования - прост. Кроме того - это интерпретатор - гибок.
В *nix системах перл - обязательная компонента системы6 присутствует всегда (если не "снести" специально)
Для винды - версию совершенно свободно можно скачать с activestate.com

Весь текст после '#' - комментарий.
Ключевое слово my используется для явного определения переменной (вроде var в паскакале)
Название переменной всегда начинается с '$', массива - '@', обращение к элементу массива - производится как к переменной с именем масива и индексом, и есть понятие "хеш" - чуть позже о нем.

Несколько простейших примеров:
Код

#!/usr/bin/perl -w

print "Hello, world!\n";

запуск: perl <имя файла с расширением>

Более сложный пример:
Код

#!/usr/bin/perl -w

my $name = <>; # чтение со стандартного устройства ввода

print "Hello, $name!\n";


И совсем сложный пример:
Код

#!/usr/bin/perl -w

my @names;
my $item = '';

do {
  print "Enter any name (or press enter if list finished): ";
  $item=<>;
  chomp;
  push @names, $item if $item;
} while ($item);

print "You entered following list:\n" . join("\n", @names, "") . "bye\n";


Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
парабеллум
сообщение 18.10.2007, 8:19
Сообщение #2


Пользователь


Группа: Пользователи
Сообщений: 330
Регистрация: 19.8.2007
Из: Киефф
Пользователь №: 17 479



интересно. Надо как-нить этим заняцоsmile.gif


--------------------
Si vis pacem, para bellum

Если бы мы задались вопросом, кто сильнейшие люди в нашей культуре, логично было бы ответить – младенцы. Младенцы правят, сами же оставаясь неподвластными.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 18.10.2007, 10:18
Сообщение #3


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



вообще-то язык наиболее "удобен" для обработки текстов, ну и для сетевого/веб программирования. То есть - математикам не совсем подходит wink.gif
Под виндой - многие из полезных возможностей отсутствуют, или ну очень уж "упрощены".
Сам по себе язык - прост - но:
1) существует несколько "стилей" написания программ, и текст программы не всегда "читаем" для людей несведущих
2) работа с памятью - максимально упрощена, и пользователь этим "прямо" управлять не может - что в некоторых случаях может приводить даже к сбоям системы
3) "логические" ошибки - то есть когда синтаксический разбор проходит нормально, и программа выполняется - но работает жутко медленно и жрет вагон памяти - допускаются очень часто, причем не только новичками.
--
Но, скажем, для того же "архив прошерстить, что-то похожее на "@#$%@" найтить", или "по логам пробежаться, посмотреть чего и как" - язык идеален wink.gif
например, антиспамовкая система spamassasin реализована на перле. Много сайтов в нете - реализовано на перле.
--
В общем - дело вкуса, но инструмент мощный, и есть в каждой *nix системе - то есть всегда "под рукой". Часто админские проблемы решать помогает wink.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 8.11.2007, 17:16
Сообщение #4


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



прислали мне "картинку зачетную".... на поздравление с "днем революции"....
Я вначале не понял - потом, после просмотра новостей - дошло....
Ну, не столько картинка понравилась - сколько она есть пример "удобства работы со строками в перле".
Может, и неудачный пример, мож, кто из перловиков меня поправит - дескать, можно и по другому-то сделать...
в общем - текст программы, позволяющий просмотреть картинку....
Код

#!/usr/bin/perl -w

my ($zero, $underl);
while ( my @lst = split /\s+/, <DATA>) {
  print "0"x$zero . "_"x$underl while ( ($zero, $underl, @lst) = @lst );
  print "\n";
  }
exit 0;

__DATA__
20      2       36      0
22      3       33      0
25      5       28      0
29      5       24      0
32      5       21      0
34      5       19      0
14      10      12      5       17      0
12      11      15      5       15      0
10      11      19      4       14      0
9       10      22      5       12      0
7       11      24      5       11      0
5       11      2       2       23      5       10      0
4       11      1       5       23      5       9       0
6       7       4       6       22      4       9       0
7       4       8       6       20      5       8       0
21      6       18      5       8       0
22      6       17      5       8       0
24      6       15      5       8       0
26      6       13      5       8       0
27      7       11      5       8       0
29      6       9       5       9       0
31      6       6       6       9       0
18      2       13      6       3       6       10      0
16      6       12      13      11      0
15      9       12      2       2       6       12      0
13      5       1       9       8       8       14      0
11      4       6       21      2       1       13      0
8       6       10      16      1       7       10      0
7       6       17      4       8       6       10      0
7       5       32      3       11      0
58      0
58      0

Для пояснения "емкости" перла - логику прокомментируем построчно:
Код
#!/usr/bin/perl -w

Типичный заголовок для текстовых исполняемых файлов в системах *nix. Для windows - сие не обязательно, нои не повредит. В этой строке указывается путь к интерпретатору, который исполнит скрипт.
Ключ командной строки "-w" - указывает интерпретатору, что нужно "жестко" проверять синтаксис. Если так попроще обьяснить - проявляется в том, что не позволяет использоватьпеременных без предварительного их обьявления.

Код
my ($zero, $underl);

Обьявление рабочих переменных.

Код
while ( my @lst = split /\s+/, <DATA>) {

Очень "многоплановая" строка. Обьявляется массив @lst, причем локально - доступен только внутри данного цикла. И массиву при "обьявлении" (инициализации) присваиваются значения. DATA - псевдо-файл данных, то есть значения, записанные после директивы __DATA__. Поскольку при чтении из файла возвращается строка, а нам нужны цифры - командой split эта строка разбивается на массив значений, причем конструкция /\s+/ читается как "считать разделителями значений любое количество последовательных пробелов"

Код
  print "0"x$zero . "_"x$underl while ( ($zero, $underl, @lst) = @lst );

Тоже "многоплановая" строка. Особенность перла - условие не обязательно писать перед блоком исполнения - можно и после него. В таком случае интерпретатор вначале проверяет условие в правой части строки - и, если условие выполнено - исполняет оператор (блок операторов) в левой части строки.
То есть - строку можно читать "по-человечески":
- печатать $zero нулей и $underl символов "_" пока из массива @lst возможно получить пару чисел wink.gif
- особенность - "списковое присвоение". Первій (нулевой) элемент массива попадает в $zero, второй (или первый, если считать от нуля) - в $underl, остальной же "хвост" массива - записивается обратно в тот же массив. То есть таким способом мы, получив первую пару значений из массива - еще и удаляем эти два значения из массива.

Код
  print "\n";

Строка закончиласть. Перевод каретки на новую строку.
--
то есть реально - вся логика программы уместилась в 3 строчки....
Наваять аналог на паскале, что ли? чтоб для сравнения?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 13.11.2007, 8:34
Сообщение #5


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Да уж, картинка точно зачетная)))., Правда сегмент DATA не сильно проще создать, чем вручную такую картинку нарисовать))).

ЗЫ. На паскакале я, например, мало пойму))

Сообщение отредактировал deviljohnson - 13.11.2007, 8:35


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 13.11.2007, 9:54
Сообщение #6


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



сегмент "дата" можно зачетно "кастрировать wink.gif
Я его не набирал - я получил картинку, и сие чудовище "дата" сгенерил скриптом wink.gif
Для обработки строк - перл рулит адназначна wink.gif

собственно, сразу "дата" не сжимал из соображений - что народ паскакалевский текст увидеть захочет. Текст на паскале - не намного сложнее, но....
конструкция вида
Код
print "0"x$zero . "_"x$underl while ( ($zero, $underl, @lst) = @lst );
- будет значительно многословнее и утомительнее wink.gif

Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 13.11.2007, 9:54
Сообщение #7


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Рулит, рулит, не поспоришь. А как картинку изначально создавали, интересно?


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 13.11.2007, 10:35
Сообщение #8


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



ну - мне ее прислал виндовзятник wink.gif
мож, в этой теме "поиграем" в создание текстовых картинок из графических файлов? wink.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 13.11.2007, 11:09
Сообщение #9


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Можно попробовать)). Если время позволит, то почему нет?


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 13.11.2007, 12:32
Сообщение #10


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



http://lunatic.no/img2aschtml.php
http://www.degraeve.com/img2txt.php

Сообщение отредактировал afterstep - 13.11.2007, 12:43
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 13.11.2007, 14:44
Сообщение #11


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



не получилось wink.gif

Сообщение отредактировал afterstep - 13.11.2007, 15:00
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 14.11.2007, 9:33
Сообщение #12


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Что именно не получилось? У меня одна картинка есть, ее только ручками до ума немного надо довести, и можно будет изголяться.


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 14.11.2007, 9:42
Сообщение #13


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



пробовал аватарки форумчан перекодировать wink.gif фигня редкая получается, если тут на форуме выкладывать wink.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 14.11.2007, 10:17
Сообщение #14


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Типа вот. На птицу времени сейчас нет, а так вроде ничего получилось. Вот оригинал


Прикрепленные изображения
Прикрепленное изображение

Прикрепленные файлы
Прикрепленный файл  pic.txt ( 1.81 килобайт ) Кол-во скачиваний: 87


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 14.11.2007, 11:11
Сообщение #15


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



неплохо wink.gif
только вот как бы форум приспособить для отображения сего?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 14.11.2007, 11:33
Сообщение #16


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



Ну, кому интересно, может напрячься, и скачать файлик. По-моему. wink.gif


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 14.11.2007, 12:29
Сообщение #17


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



опять горбато вышло wink.gif
видно, надо свой скрипт написать wink.gif

Сообщение отредактировал afterstep - 14.11.2007, 12:32
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
deviljohnson
сообщение 14.11.2007, 12:44
Сообщение #18


Пользователь


Группа: Активисты
Сообщений: 650
Регистрация: 13.6.2007
Из: Москва
Пользователь №: 16 928



А что такое? У меня все видится нормально


--------------------
Билл- гей, т-с-с!
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
afterstep
сообщение 20.11.2007, 13:29
Сообщение #19


Пользователь


Группа: Активисты
Сообщений: 5 336
Регистрация: 14.3.2005
Пользователь №: 2 413



xxx: я нечайно отцу систему гробанул думал убьёт
xxx: а он мне пока толко смску прислал
xxx: с текстом
xxx: f=fork(); if (f) kill (SIGKILL, f);
xxx: что это значит??
yyy: сочувствую тебе чувак
xxx: ???
yyy: тараса бульбу читал?
xxx: да
yyy: так вот это можно перевести как
yyy: "я тебя породил, я тебя и убью")))
--
зачетный однострочник на перле wink.gif
породжает процесс, и из главного - его же и убивает wink.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
ak3n
сообщение 14.8.2009, 7:10
Сообщение #20


Пользователь


Группа: Пользователи
Сообщений: 3
Регистрация: 31.5.2009
Пользователь №: 21 766



перл может и рулит, но python рулит в 2 раза больше =)
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия Сейчас: 23.5.2012, 3:04