perlintro |
- Statistics
- Participants
- Translate into Russian
- Translation result
- Translated in draft, editing and proof-reading required. Completed: 76%.
=head1 НАЗВАНИЕ
perlintro -- краткое введение и обзор Perl
=head1 ОПИСАНИЕ
Цель этого документа — дать вам общее представление о языке программирования Perl, вместе с ссылками на другую документацию. Он является начальным руководством для новичков и содержит достаточно информации для чтения и понимания в общих чертах скриптов написанных другими людьми, а также для написания собственных.
Этот вводный документ не претендует на полноту. Он даже не претендует на абсолютную точность. В некоторых случаях "совершенство" пало жертвой попытки подать главную идею. I<Настоятельно> рекомендуется соотносить информацию, полученную из этого руководства, с другими руководствами по Perl; необходимый список литературы может быть найден в L<perltoc>.
Изучая этот документ, вы увидите ссылки на другие части документации Perl. Вы можете читать эту документацию используя команду C<perldoc> или метод, который вы используете для чтения этого документа.
=head2 Что такое Perl?
Perl — это многоцелевой язык программирования, изначально разработанный для обработки текста и сейчас используется для широкого спектра целей, включающих системное администрирование, веб-разработку, сетевое программирование, разработку GUI и многое другое.
Этот язык скорее практичный (легкий в использовании, производительный и полный), чем красивый (элегантный, краткий). Его основные достоинства — это легкость в использовании, поддержка как процедурного, так и объектно-ориентированного программирования, мощная встроенная поддержка для обработки текстовых данных, он имеет одну из самых впечатляющих коллекций сторонних модулей.
Другие определения Perl даны в L<perl>, L<perlfaq> и, без сомнения, других местах. Это лишний раз доказывает, что разные люди по-разному воспринимают Perl.
=head2 Запуск Perl-программ
Чтобы запустить программу на Perl из командной строки Unix выполните:
perl progname.pl
Вместо этого можно поместить первой строкой скрипта следующее:
#!/usr/bin/env perl
и запустить скрипт как C</path/to/script.pl>. Конечно, вы должны вначале сделать скрипт исполняемым, выполнив C<chmod 755 скрипт.pl> (в среде Unix).
(Такая начальная строка подразумевает, что вы имеете в своей операционной системе программу B<env>. Вы также можете просто указать полный путь к исполняемому файлу perl, что-то вроде C<#!/usr/bin/perl>).
Для подробной информации, включая инструкции по другим платформам, таким как Windows и Mac OS, читайте L<perlrun>.
=head2 Общая безопасность
Perl по умолчанию очень нетребовательный. Для того, чтобы сделать его более надёжным, рекомендуется начинать все программы со следующих строк:
#!/usr/bin/perl
use strict;
use warnings;
Две дополнительные строки заставляют perl отлавливать различные известные проблемы в вашем коде. Они проверяют разные вещи, так что вам нужны обе. При обнаружении потенциальной проблемы с помощью C<use strict;>, ваш код сразу же прекратит работу. В то время как C<use warnings;> просто выдаст вам предупреждение (подобно ключу B<-w> в командной строке) и позволит выполниться вашему коду. Чтобы прочесть о них больше, обратитесь к их man страницам: L<strict> и L<warnings>.
=head2 Общее введение в синтаксис
Perl скрипт или программа содержит одну или более команд. Эти команды просто линейно записаны в скрипт. Нет необходимости в функции C<main()> или подобных вещах.
Команды Perl заканчиваются точкой с запятой:
print "Hello, world";
Комментарии начинаются с решетки и длятся до конца строки.
# Это комментарий.
Пробелы игнорируются:
print
"Hello, world"
;
... кроме обозначенных внутри кавычек:
# напечатает перевод строки в середине
print "Hello
world";
Двойные или одинарные кавычки могут использоваться для обозначения литеральных строк:
print "Hello, world";
print 'Hello, world';
Однако, только двойные кавычки интерполируют переменные и спецсимволы, такие как знак новой строки (C<\n>):
print "Hello, $name\n"; #работает как надо
print 'Hello, $name\n'; #печатает $name\n буквально
Вокруг чисел кавычки не нужны:
print 42;
Вы можете использовать скобки для аргументов функций или исключить их, в соответствии с вашими личными предпочтениями. Они необходимы только иногда, для уточнения приоритета выполнения.
print("Hello, world\n");
print "Hello, world\n";
Более подробная информация по синтаксису Perl может быть найдена в L<perlsyn>.
=head2 Типы переменных Perl
В Perl есть три главных типа переменных: скаляры, массивы и хэши.
=over 4
=item Скалярные
Скаляр представляет единичное значение:
my $animal = "camel";
my $answer = 42;
Значения скаляров могут быть строками, числами или числами с плавающей точкой, и Perl автоматически преобразует их между собой, если понадобится. Нет необходимости предварительно указывать типы ваших переменных, но объявлять их надо с ключевым словом C<my> (это одно из требований C<use strict;>).
Значения скаляров могут использоваться различным образом:
print $animal;
print "The animal is $animal\n";
print "The square of $answer is ", $answer * $answer, "\n";
Есть несколько "магических" переменных, имена которых выглядят как пунктуация или просто набор символов. Эти специальные переменные используются для различных целей, и они документированы в L<perlvar>. Единственная такая переменная, о которой вам сейчас надо знать — C<$_> — является "переменной по умолчанию". Она используется по умолчанию в качестве аргумента в ряде функций в Perl и косвенно устанавливается в циклах.
print; # напечатать данные из $_ по умолчанию
=item Массивы
Массив представляет список значений:
my @animals = ("camel", "llama", "owl");
my @numbers = (23, 42, 69);
my @mixed = ("camel", 42, 1.23);
Нумерация элементов массива начинается с нуля. Вот как можно получить элемент массива:
print $animals[0]; #печатает "camel"
print $animals[1]; #печатает "llama"
Специальная переменная C<$#array> содержит индекс последнего элемента в массиве:
print $mixed[$#mixed]; # последний элемент, печатает 1.23
У вас может возникнуть искушение воспользоваться конструкцией C<$#array + 1> для вычисления количества элементов в массиве. Не надо. Использование C<@array> там, где Perl ожидает скалярное значение ("в скалярном контексте"), даст вам количество элементов в массиве:
if (@animals < 5) { ... }
Элементы, получаемые из массива, начинаются с C<$> потому, что мы получаем только одно значение — вы запрашиваете скаляр, вы получаете скаляр.
Получение нескольких значений из массива:
@animals[0,1]; # дает ("camel", "llama");
@animals[0..2]; # дает ("camel", "llama", "owl");
@animals[1..$#animals]; #дает все значения, кроме первого
Это называется "срез массива".
Вы можете производить над списком различные полезные действия:
my @sorted = sort @animals;
my @backwards = reverse @numbers;
Есть также несколько специальных массивов, такие как C<@ARGV> (аргументы командной строки, переданные вашему скрипту) и C<@_> (аргументы, переданные подпрограмме). Они документированы в L<perlvar>.
=item Хэши
Хэш представляет собой набор пар ключ-значение:
my %fruit_color = ("apple", "red", "banana", "yellow");
Вы можете использовать пробел и оператор C<< => >> для более элегантного представления:
my %fruit_color = (
apple => "red",
banana => "yellow",
);
Получить элемент хэша:
$fruit_color{"apple"}; #дает "red"
Вы можете получить список ключей и значений с помощью C<keys()> и C<values()> соответственно.
my @fruits = keys %fruit_colors;
my @colors = values %fruit_colors;
Хэши не имеют конкретного внутреннего порядка, но вы всё же можете сортировать ключи и использовать циклы.
Подобно специальным скалярам и массивам, существуют и специальные хэши. Наиболее часто употребляемый из них — это C<%ENV>, содержит переменные окружения. Читайте об этом (и других специальных переменных) в L<perlvar>.
=back
Скаляры, массивы и хэши более подробно документированы в L<perldata>.
Более сложные типы данных могут быть построены с использованием ссылок, которые позволяют
вам строить списки и хэши внутри других списков и хэшей.
Ссылка является скалярным значением и может ссылаться на любой другой тип данных Perl. Таким образом, используя ссылку в качестве элемента массива или хэша, вы можете легко создать списки и хэши внутри других списков и хэшей. Следующий пример показывает двухуровневую структуру - хэш хэшей, построенный с использованием ссылок на анонимный хэш.
my $variables = {
scalar => {
description => "single item",
sigil => '$',
},
array => {
description => "ordered list of items",
sigil => '@',
},
hash => {
description => "key/value pairs",
sigil => '%',
},
};
print "Scalars begin with a $variables->{'scalar'}->{'sigil'}\n";
Исчерпывающая информация по теме ссылок может быть найдена в L<perlreftut>, L<perllol>, L<perlref> и L<perldsc>.
=head2 Области видимости переменных
В предыдущих абзацах во всех примерах использовался синтаксис:
my $var = "value";
Вообще-то, ключевое слово C<my> не является обязательным. Можно просто писать:
$var = "value";
Однако, указанный выше синтаксис создаёт в вашей программе глобальную переменную, что является плохой практикой. C<my> создаст переменную с ограниченной областью видимости. Переменные попадают в область видимости блока (т.е. заключенный в фигурные скобки список объявлений), в котором они объявлены.
my $x = "foo";
my $some_condition = 1;
if ($some_condition) {
my $y = "bar";
print $x; # напечатает "foo"
print $y; # напечатает "bar"
}
print $x; # напечатает "foo"
print $y; # ничего не напечатает; $y вышло из видимости
Использование C<my> в сочетании с C<use strict;> в начале ваших Perl скриптов означает, что интерпретатор будет отслеживать общие ошибки программирования. В приведенном выше примере, последний вызов C<print $y> может привести к ошибке компиляции и предотвратить дальнейшее исполнение программы. Использование C<strict> настоятельно рекомендуется.
=head2 Условные и цикличные конструкции
В Perl имеется большинство обычных условных и циклических конструкций, исключая case/switch (но если очень хочется, то для Perl 5.8 и новее, на CPAN есть модуль Switch. Смотрите секцию модулей ниже, для подробной информации о модулях и CPAN).
Условиями могут быть любые выражения Perl. Смотрите перечень операторов в следующей секции для информации по сравнению и логическим булевым операторам, которые обычно используются в выражениях сравнения.
=over 4
=item if
if ( условие ) {
...
} elsif ( другое условие ) {
...
} else {
...
}
Original (English): perlintro
Translation: © saturn721, Minoru, Алексей Суриков, Vladimir Brednikov, Dim_K, XoR, sharifulin, AndreyBelov, mikhail.lyubimov .
