Видео смотреть бесплатно

Смотреть зрелые видео

Официальный сайт netfuncards 24/7/365

Смотреть видео бесплатно

15.02.10 21:07 afiskon

СкриптыМоя статья: Основы программирования на Perl

По просьбе нескольких своих друзей я написал пост о программировании на Perl. Возможно, кого-то эта тема интересует, в этом случае прошу ознакомиться. Интересует, насколько легко, по-вашему, воспринимается статья, остались ли после прочтения какие-то не совсем ясные моменты и так далее. В общем хотелось бы получить пару объективных отзывов.

Статья под катом

Так получилось, что я знаю как минимум двух человек, которые в настоящее время хотели бы выучить Perl. Специально для них я решил написать этот пост.

В нем вы найдете примеры простых программ из серии ‘вывести числа от 1 до 5′ и тому подобное. Мне всегда нравилось учиться на примерах – это интереснее и быстрее, чем по книжкам или на семинарах. Также можете посмотреть посты этого блога, имеющие метку Perl – велика вероятность, что в них вы найдете еще примеры.


Я предполагаю, что в школе/институте вы изучали Pascal/Delphi, C или хотя бы Basic, и объяснять, что такое функция и циклы не требуется. Если это не так – ничего страшного, просто для того, чтобы во всем разобраться, вам придется потратить лишнее время на чтение Википедии. Если вы не знаете, как запустить bash-скрипт, или для чего в первой строке скрипта писать что-то вроде #!/bin/sh, придется немного погуглить, чтобы это выяснить.


Специально для тех, кого интересуют вопросы, «а правда ли, что Perl очень сложен», «а какие книжки по Perl можете посоветовать» и даже «эээ… а что, на нем еще пишут?», я написал Mini-FAQ по Perl, которое вы можете прочитать на HabraHabr. А для тех, кто неасилил многабукв здесь я приведу краткое его содержание:



  • Perl – современный язык программирования, на котором пишут и будут писать еще очень долго.

  • Perl, как и любой другой язык программирования, имеет свои достоинства, недостатки и области применения. Существует действительно большой класс задач, которые Perl решает на 5+.

  • Синтаксис Perl не сложнее синтаксиса C++ или Java. В этом вы сможете убедиться, дочитав данный пост до конца.

  • Существуют хорошие и при этом недорогие учебники по Perl. Также в сети вы без труда найдете сообщество perl-программистов, говорящих на вашем родном языке.

  • Perl хорошо работает как под операционными системами семейства UNIX, так и под Злом Windows.


Привет, %username%!


Итак, давайте уже напишем наш первый скрипт на Perl!


1
2
3
4
#!/usr/bin/perl

$name = shift();
print("Hello, $name!\n");

Запускаем скрипт:


$ chmod u+x 1.pl

$ ./1.pl afiskon


Hello, afiskon!

Тут все очень просто:


  • Имена скалярных переменных (то есть не массивов и не хэшей, что это такое – см ниже) начинаются со знака доллара

  • Функция shift возвращает очередной аргумент скрипта. Другими словами первый вызов shift() возвращает первый аргумент, второй вызов – второй аргумент и так далее

  • Функция print() выводит строку, переданную в качестве аргумента.

  • В строку можно подставлять значения переменных (см строку 4). Подробнее о строках – см далее.

Если пока не очень понятно – ничего страшного. Возможно, немного теории внесет чуть больше ясности.



Типы переменных


В Perl существует три основных типа переменных: скаляры (числа и строки), массивы – подобно тем, что используются в Pascal или C (иногда массивы еще называют векторами), и хэши (ассоциативные массивы).


Скаляры мы уже использовали в предыдущем примере. Вот еще несколько примеров задания скаляров.



1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl

$a = 123;
$b = -7.496;
$c = 0xABC; # равно 2748, да, это комментарий :)
$d = ($a + $b) / $c;
$d *= $a; # тоже самое, что $d = $d * $a;

$str1 = "hello";
$str2 = "$str1, world"; # в $str2 записано 'hello, world'
$str3 = $a."\n".$str2;
$str4 = '$str1'; # в $str4 записано '$str1', а не 'hello'

Тут мы задаем положительные и отрицательные, целые и дробные числа, задаем число в шестнадцатеричной кодировке, складываем, умножаем и делим – все как в си или java. Кроме перечисленных операций perl также поддерживает операцию возведения в степень:


$a = 2 ** 8; # результат: 256


Со строками все примерно так же, как в каком-нибудь PHP. Точка означает операцию конкатенации (то есть «склеивания» строк), если в строке содержатся имена переменных, на их место подставляются значения, с помощью обратного слэша можно вставлять символы новой строки (\n), табуляции (\t), кавычки (\"), сам обратный слэш (\\) знак доллара безо всякой подстановки переменных (\$) и многое другое. Если строка в одинарных кавычках, символы в ней трактуются «как есть», без подстановки переменных и тд.


Как и PHP, Perl интерпретирует скаляры, как числа или как строки в зависимости от контекста. Все просто:


$int1 = "11" + 22;
# ^ числовой контекст, строка "11" преобразуется в число,
# после чего выполняется сложение, результат: 33.
$str1 = "11" . 22;
# ^ строковый контекст, число 22 преобразуется в строку,
# после чего выполняется конкатенация, результат: "1122".

Правила преобразования из строки в число и наоборот тут те же, что и в PHP:


$str1 = 0 . "abc";
# ^ результат - "abc", число ноль преобразуется в пустую строку
$int1 = "aaa" + 1;
# ^ результат - 1, в строке "aaa" нет цифр
$int2 = "12aaa" + 1;
# ^ результат - 13, учитываются только первые цифры строки

Кстати, для объявления длинных строк существует специальный оператор – qq:


# ...
$message = qq {

Hello, $username!


How are you?
};

Работа с массивами происходит следующим образом:


1
2
3
4
5
6
7
8
#!/usr/bin/perl

$scalar = "bebebebe";
($a, $b) = (1, 2); # тоже самое, что $a = 1; $b = 2;
@arr = ("aaa", 123, $scalar, $a+$b);
print $arr[1]."\n";
push @arr, $a;
print pop(@arr)."\n";

Здесь мы создаем массив @arr, состоящий из 4-х элементов (строка 5). Затем выводим второй элемент (строка 6). Нумерация элементов начинается с нуля, поэтому для вывода второго по счету элемента используется индекс 1. Затем кладем в конец массива значение переменной $a (функция push, строка 7), и тут же извлекаем и выводим его (функция pop, строка 8).


Обратите внимание, имена массивов начинаются с «собаки», а не доллара (запомнить не сложно – соответствующие символы похожи на первые буквы английских названий типов: $ – scalar, @ – array). При обращении ко второму элементу массива (строка 6) использовался знак доллара, потому что элемент массива является скаляром. По началу это вызывает много путаницы, но вообще все логично.


Еще в этом скрипте мы вызываем функции print и push без скобок. В perl при вызове функции, везде, где это не вызывает неопределенности, скобки можно опустить.



Для объявления массива, элементами которого являются строки без пробелов, существует специальный оператор – qw:


@arr = qw/aaa bbb ccc/;
# аналогично ("aaa", "bbb", "ccc"), только короче

Хэши похожи на массивы, но элементы в хэше не упорядочены. При этом в качестве ключа, по которому производится доступ к элементу, могут использоваться строки.


1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/perl

%hash = ( # при объявлении хэшей и массивов можно

  "x" => 12, # использовать перенос строк


  "y" => 53,

  "z" => -10.5, # запятую на конце можно оставлять
);

$hash{"x"}++; # координата по x теперь равна 13
$hash{y}--; # координата по y теперь равна 52

# выводим координаты
print "x = $hash{x}, y = $hash{y}, z = $hash{z}\n";

Имена хэшей начинаются со знака процента, для обращения к элементу используются фигурные скобки (а не квадратные, как в случае с массивами). Если имя ключа заранее известно, можно указывать его без кавычек (строка 10).


Кстати, переменные $test, @test и %test – это совершенно независимые друг от друга переменные разного типа.


В этом месте я хотел перейти к условным операторам и циклам for/while в perl, но понял, что для одного поста текста и так уже многовато. Между тем за кадром остались многие вопросы:


  • Условные операторы

  • Циклы for и while

  • Объявление функций

  • Работа с потоками и файлами

  • Строгий синтаксис

  • Использование готовых модулей и классов

Об этом я напишу в одной из следующих статей. Хотелось бы получить хотя бы парочку комментариев на этот пост – интересно/неинтересно, понятно/непонятно и так далее. Кстати, если у вас есть вопросы, связанные с Perl (не обязательно с этим постом) – смело задавайте их в комментариях!


Надеюсь, серия постов о программировании на Perl поможет вам написать ваши первые простенькие скрипты на perl. Со временем скрипты будут становится сложнее, в них станут использоваться новые технологии (ООП, регулярные выражения) и через какое-то время вы обнаружите, что знаете о Perl достаточно, чтобы делиться опытом с другими.



Источник http://eax.me/perl-basics/


Теги:

exelens 15.02.10 22:24 # +0
Перепостил целиком и указал источник.
В следующий раз прошу или делать пост-ссылку или сделать аналогично тому как сейчас =)
afiskon 15.02.10 23:41 # +0
Ок, спасибо.
digiwhite 15.02.10 22:27 # +0
Ну ИМХО написано вроде доступно. Хотя может быть потому, что я уже имею некоторый опыт и навык работы с другими ЯП.
bvk 15.02.10 22:33 # +0
Тема работы с регэкспами не раскрыта.
exelens 15.02.10 22:35 # +2
Нужно ли всё описывать в 1 статье?
Ведь 100 % что то упустишь. Или не?
bvk 16.02.10 00:50 # +0
То, для чего перл предназначен, для чего и каким образом его суперудобно использовать, тут не описывается, а вместо этого автор рассказывает еще об одном PHP. Сейчас попробовал перечитать статью с точки зрения новичка и не понял, зачем мне заморачиваться с новым непонятным языком программирования, похожим на PHP, но не PHP, если я уже знаю PHP?

(Perl на протяжении многих лет был моим основным языком, если что)
digiwhite 15.02.10 22:38 # +0
Это жешь введение :)
Username 15.02.10 23:21 # +0
Спасибо, в мемориз, жду продолжения
Username 15.02.10 23:22 # +3
booley 16.02.10 07:39 # +0
Только хотел процитировать!
Tirador 16.02.10 23:06 # +0
Жду продолжения.
f_evgeny 15.02.10 23:21 # +0
Статья хорошая, но, почему не Python?
Я сам много писал на Perl, и сейчас пишу, но все-таки если есть возможность, выбираю Python.
afiskon 15.02.10 23:42 # +0
Я не знаю Python. Хотя пробовал его изучать - по всей видимости хороший язык, документация с ним хорошая помнится шла.
f_evgeny 15.02.10 23:48 # +0
Я бы назвал Python улучшенным Perl-ом. Сейчас приходится работать под Perl, очень не хватает буквально нескольких вещей. Сейчас перечислю, если бы их приделать к Perl, было бы супер:
- Простой синтаксис определения многомерных массивов:
a = [[1,2],[3,4]]
- массивы массивов при передаче в функцию не становятся плоскими
- Простой синтаксис определения классов
afiskon 15.02.10 23:51 # +0
Кажется, тут вам просто не хватает знания матчасти
1) @arr = ([1,2], [3,4]);
2) my_func(\@arr);
sub my_func {
my ($ptr) = @_;
push @{$ptr->[0]}, 3;
}
3) Это да, ждем perl6.
f_evgeny 16.02.10 10:45 # +0
Так я умею, мне как раз и нравится в Python то, что синтаксис создания, присваивания и передачи в функцию массивов в Python одинаковый, а в Perl - разный. Не надо лишний раз думать.
Т.е. что тут общего в Python и Perl? Общее удобство работы со списками и словарями. Но у Python это удобство взято и развито дальше.
afiskon 16.02.10 10:51 # +0
Синтаксис - пожалуй, действительно единственное существенное отличие между Perl и Python. Ну тут, как говорится, на вкус и цвет. Кстати, буквально сегодня заказал книжку по Python (не люблю читать с монитора), давно хотел ознакомиться.
digiwhite 15.02.10 23:55 # +0
Я бы назвал их совершенно разными языками. Несмотря на то, что они оба интерпретируемы.
f_evgeny 16.02.10 10:46 # +0
Я не говорю, что они одинаковые, я говорю, что в Python подхвачены и улучшены идеи, заложенные в Perl.
Для меня Perl удобнее пожалуй в двух вещах:
- Написание однострочников
- Написание простых фильтров
Как только что-то чуть сложнее, сразу нужно брать Python.
kstep 17.02.10 05:08 # +0
Могу не согласиться. Есть очень изящные и красивые решения задач на перле.
В частности в своё время писал достаточно большое коммерческое веб-приложение на перле. Тут скорее дело в том, что ты лучше знаешь: перл или питон.
kstep 16.02.10 00:00 # +0
Есть многие вещи, которые в перле решаются намного проще. Сам пишу и на том, и на другом, но тексты парсить и анализировать гораздо удобнее перлом. В частности я далеко не в восторге от реализации поддержки Unicode в питоне, в перле это сделано намного лучше.
KblCb 16.02.10 00:27 # +0
А почему Python?
f_evgeny 16.02.10 10:48 # +0
По моему мнению сейчас это наиболее удобный и развитый универсальный язык.
KblCb 16.02.10 23:54 # +1
По моему мнению, мягко говоря, нет. Я знаю перл и знаю питон. И с последним по возможности стараюсь работать в исключительных случаях. У него очень неудобный и некрасивый синтаксис, а чего-то особенного чего нет в других языках его уровня абстракции он попросту не умеет. Единственное преимущество питона это довольно шустрый интерпретатор. Но, увы, не настолько, чтобы на нём можно было писать что-то критически важное по скорости. Так что свистопляска вокруг питона мне напоминает твиттер, гуглевейв и нанотехнологии. (Чтобы не показаться пристрастным, в перле меня дико раздражает отсутствие внятного ООП как например в ruby и бессистемное безумие вместо синтаксиса (красивым автор считает синтаксис tcl - примечание автора)) С другой стороны вам никто не мешает написать статью про питон. Это было бы гораздо лучше нежели критика доживающего свой век perl5. Право я не понимаю, чего плохого в статье по тому или иному ЯП? Пусть будет. Вам видимо никогда не доводилось получать от начальства задания написать к обеду скрипт на VBS не смотря на полное незнание вами синтаксиса оного VBS'а.
kstep 17.02.10 05:12 # +0
С другой стороны, чем больше языков я изучаю, тем больше убеждаюсь, что плохих и совсем некрасивых языков не бывает. Каждый язык по своему хорош и имеет свою нишу. И разные задачи проще выражаются на разных языках. Как там было, «О любви я говорю по-французски, о делах — по-немецки, о цветах — по-голландски, а матерюсь — по-русски»...
f_evgeny 17.02.10 12:11 # +0
Назовите реальную альтернативу Python?
Я пользуюсь и Perl и Python, уже писал, чем не нравится Perl. Самое главное, то, что у него неудобный синтаксис передачи параметров в функцию, имею в виду массивы/словари(хэши).
Я не критикую Perl. Просто на сегодня оптимальным выбором в качестве скриптового языка считаю Python. Раньше был Perl.
Это не значит что Perl плохой. Просто некоторые вещи в Python удобнее.
Статью про Python? Думаете нужна еще одна статья? Могу написать.
Shtsh 15.02.10 23:24 # +1
давно хотел чего-нибудь по перлу почитать :) Вот и появилось тут
afiskon 15.02.10 23:46 # +0
Рад, что Вам понравилось. Чувствую, продолжению быть.
kstep 16.02.10 00:08 # +0
Неплохая статья для начинающих, но всё равно требует некоторых базовых знаний программирования хотя бы на каком-нибудь другом языке.
ner_uto 16.02.10 19:25 # +0
Наверное мое мнение будет особенно ценно, ибо я знаю пол-языка программирования:) 2 года QBasic в школе и год - в универе.

Все в общем-то понятно, хотя да, требуется хотя бы базовое знание, что такое тот же "скаляр".

И еще, можно "для блондинок" объяснить вот эту часть:

Имена хэшей начинаются со знака процента, для обращения к элементу используются фигурные скобки (а не квадратные, как в случае с массивами). Если имя ключа заранее известно, можно указывать его без кавычек (строка 10).

Но 10я строка ничем вроде бы не отличается от 8 и 5.
afiskon 16.02.10 20:09 # +0
При копировании статьи из блога, нумерация строк сбилась. Посмотрите оригинал на http://eax.me/
ner_uto 16.02.10 21:08 # +0
Вон оно что... спасибо.
f_evgeny 17.02.10 12:14 # +0
Скаляр это ИМХО не базовое знание, это специфическое для Perl. Это базовый тип, примерно соответствует строке.

Посты Комментарии
Последние посты
    Посты Комментарии
    Последние комментарии
      Посты Комментарии
      Изменения
        Посты Комментарии Изменения Черновики Избранное
        Черновики (все)
          Посты Комментарии Изменения Черновики Избранное
          Избранное (всё)
            Посты Комментарии Изменения Черновики Избранное
            Лучшие блоги (все 141)
            Топ пользователей Топ блогов
            Топ пользователей Топ блогов
            Элита (все 2820 из 215 городов)
            Топ пользователей Топ блогов
            welinux.ru

            Смотреть видео онлайн

            Онлайн видео бесплатно


            Смотреть русское с разговорами видео

            Online video HD

            Видео скачать на телефон

            Русские фильмы бесплатно

            Full HD video online

            Смотреть видео онлайн

            Смотреть HD видео бесплатно

            School смотреть онлайн