mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 17:41:41 +00:00
Create bg-bg/perl.html.markdown (#2255)
* Create perl.html.markdown * renamed file to match requirments
This commit is contained in:
parent
70a5bb0787
commit
b5def35dab
326
bg-bg/perl-bg.html.markdown
Normal file
326
bg-bg/perl-bg.html.markdown
Normal file
@ -0,0 +1,326 @@
|
||||
---
|
||||
name: perl
|
||||
category: language
|
||||
language: perl
|
||||
filename: learnperl.pl
|
||||
contributors:
|
||||
- ["Korjavin Ivan", "http://github.com/korjavin"]
|
||||
- ["Dan Book", "http://github.com/Grinnz"]
|
||||
translators:
|
||||
- ["Красимир Беров", "https://github.com/kberov"]
|
||||
lang: bg-bg
|
||||
---
|
||||
|
||||
Perl 5 е изключително мощен език за програмиране с широка област на приложение
|
||||
и над 25 годишна история.
|
||||
|
||||
Perl 5 работи на повече от 100 операционни системи от мини до супер-компютри и е
|
||||
подходящ както за бърза разработка на скриптове така и за огромни приложения.
|
||||
|
||||
```perl
|
||||
# Едноредовите коментари започват със знака диез.
|
||||
|
||||
#### Стриктен режим и предупреждения
|
||||
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
# Силно препоръчително е всички скриптове и модули да включват тези редове.
|
||||
# strict спира компилацията в случай на необявени предварително променливи.
|
||||
# warnings показва предупредителни съобщения в случай на често допускани грешки,
|
||||
# например използване на променливи без стойност в низове.
|
||||
|
||||
#### Типове променливи в Perl
|
||||
|
||||
# Променливите започват със съответен знак (sigil - от латински sigillum ),
|
||||
# който представлява символ, указващ типа на променливата. Името на самата
|
||||
# променлива започва с буква или знак за подчертаване (_), следван от какъвто и
|
||||
# да е брой букви, цифри или знаци за подчертаване. Забележете, че ако напишете
|
||||
# 'use utf8;' (без кавичките), можете да използвате всякакви букви за имена на
|
||||
# променливите, включително и български.
|
||||
|
||||
### Perl има три главни типа променливи: $scalar (скалар), @array (масив), and %hash (хеш).
|
||||
|
||||
## Скалари
|
||||
# Скаларът представлява единична стойност:
|
||||
my $animal = "camel";
|
||||
my $answer = 42;
|
||||
use utf8;
|
||||
my $животно = 'камила';
|
||||
|
||||
# Стойностите на скаларите могат да бъдат низове, цели числа или числа с
|
||||
# плаваща запетая (десетични дроби). Perl автоматично ги ползва и превръща от
|
||||
# един тип стойност в друга, според както е необходимо.
|
||||
|
||||
## Масиви
|
||||
# Масивът представлява списък от стойности:
|
||||
my @animals = ("камила", "llama", "owl");
|
||||
my @numbers = (23, 42, 69);
|
||||
my @mixed = ("camel", 42, 1.23);
|
||||
|
||||
# Елементите на масива се достъпват като се използват квадратни скоби и $,
|
||||
# който указва каква стойност ще бъде върната (скалар).
|
||||
my $second = $animals[1];
|
||||
|
||||
## Хешове
|
||||
# Хешът представлява набор от двойки ключ/стойност:
|
||||
|
||||
my %fruit_color = ("ябълка", "червена", "banana", "yellow");
|
||||
|
||||
# Може да използвате празно пространство и оператора "=>" (тлъста запетая),
|
||||
# за да ги изложите по-прегледно:
|
||||
|
||||
%fruit_color = (
|
||||
ябълка => "червена",
|
||||
banana => "yellow",
|
||||
);
|
||||
|
||||
# Елементите (стойностите) от хеша се достъпват чрез използване на ключовете.
|
||||
# Ключовете се ограждат с фигурни скоби и се поставя $ пред името на хеша.
|
||||
my $color = $fruit_color{ябълка};
|
||||
|
||||
# Скаларите, масивите и хешовете са документирани по-пълно в perldata.
|
||||
# На командния ред напишете (без кавичките) 'perldoc perldata'.
|
||||
|
||||
#### Указатели (Референции)
|
||||
|
||||
# По-сложни типове данни могат да бъдат създавани чрез използване на указатели,
|
||||
# които ви позволяват да изграждате масиви и хешове в други масиви и хешове.
|
||||
|
||||
my $array_ref = \@array;
|
||||
my $hash_ref = \%hash;
|
||||
my @array_of_arrays = (\@array1, \@array2, \@array3);
|
||||
|
||||
# Също така можете да създавате безименни масиви и хешове, към които сочат само
|
||||
# указатели.
|
||||
|
||||
my $fruits = ["apple", "banana"];
|
||||
my $colors = {apple => "red", banana => "yellow"};
|
||||
|
||||
# Можете да достигате до безименните структури като поставяте отпред съответния
|
||||
# знак на структурата, която искате да достъпите (дереферирате).
|
||||
|
||||
my @fruits_array = @$fruits;
|
||||
my %colors_hash = %$colors;
|
||||
|
||||
# Можете да използвате оператора стрелка (->), за да достигнете до отделна
|
||||
# скаларна стойност.
|
||||
|
||||
my $first = $array_ref->[0];
|
||||
my $value = $hash_ref->{banana};
|
||||
|
||||
# Вижте perlreftut и perlref, където ще намерите по-задълбочена документация за
|
||||
# указателите (референциите).
|
||||
|
||||
#### Условни изрази и цикли
|
||||
|
||||
# В Perl ще срещнете повечето от обичайните изрази за условия и обхождане (цикли).
|
||||
|
||||
if ($var) {
|
||||
...
|
||||
} elsif ($var eq 'bar') {
|
||||
...
|
||||
} else {
|
||||
...
|
||||
}
|
||||
|
||||
unless (условие) {
|
||||
...
|
||||
}
|
||||
# Това е друг, по-четим вариант на "if (!условие)"
|
||||
|
||||
# Perl-овския начин след-условие
|
||||
print "Yow!" if $zippy;
|
||||
print "Нямаме банани" unless $bananas;
|
||||
|
||||
# докато
|
||||
while (условие) {
|
||||
...
|
||||
}
|
||||
|
||||
|
||||
# цикли for и повторение
|
||||
for (my $i = 0; $i < $max; $i++) {
|
||||
print "index is $i";
|
||||
}
|
||||
|
||||
for (my $i = 0; $i < @elements; $i++) {
|
||||
print "Current element is " . $elements[$i];
|
||||
}
|
||||
|
||||
for my $element (@elements) {
|
||||
print $element;
|
||||
}
|
||||
|
||||
# мълчаливо - използва се подразбиращата се променлива $_.
|
||||
for (@elements) {
|
||||
print;
|
||||
}
|
||||
|
||||
# Отново Perl-овския начин след-
|
||||
print for @elements;
|
||||
|
||||
# отпечатване на стойностите чрез обхождане ключовете на указател към хеш
|
||||
print $hash_ref->{$_} for keys %$hash_ref;
|
||||
|
||||
#### Регулярни (обикновени) изрази
|
||||
|
||||
# Поддръжката на регулярни изрази е залеганала дълбоко в Perl. Задълбочена
|
||||
# документация ще намерите в perlrequick, perlretut и на други места.
|
||||
# Но ето накратко:
|
||||
|
||||
# Просто съвпадение
|
||||
if (/foo/) { ... } # истина ако $_ съдържа "foo"
|
||||
if ($x =~ /foo/) { ... } # истина ако $x съдържа "foo"
|
||||
|
||||
# Просто заместване
|
||||
|
||||
$x =~ s/foo/bar/; # замества foo с bar в $x
|
||||
$x =~ s/foo/bar/g; # Замества ВСИЧКИ ПОЯВИ на foo с bar в $x
|
||||
|
||||
|
||||
#### Файлове и Вход/Изход (I/O)
|
||||
|
||||
# Можете да отворите файл за въвеждане на данни в него или за извеждане на
|
||||
# данни от него като използвате функцията "open()".
|
||||
|
||||
open(my $in, "<", "input.txt") or die "Не мога да отворя input.txt: $!";
|
||||
open(my $out, ">", "output.txt") or die "Can't open output.txt: $!";
|
||||
open(my $log, ">>", "my.log") or die "Can't open my.log: $!";
|
||||
|
||||
# Можете да четете от отворен файлов манипулатор като използвате оператора
|
||||
# "<>". В скаларен контекст той чете по един ред от файла наведнъж, а в списъчен
|
||||
# контекст изчита всички редове от файла наведнъж като присвоява всеки ред на
|
||||
# масива:
|
||||
|
||||
my $line = <$in>;
|
||||
my @lines = <$in>;
|
||||
|
||||
#### Подпрограми (функции)
|
||||
|
||||
# Да се пишат подпрограми е лесно:
|
||||
|
||||
sub logger {
|
||||
my $logmessage = shift;
|
||||
|
||||
open my $logfile, ">>", "my.log" or die "Could not open my.log: $!";
|
||||
|
||||
print $logfile $logmessage;
|
||||
}
|
||||
|
||||
# Сега можем да ползваме подпрограмата като всяка друга вградена функция:
|
||||
|
||||
logger("Имаме подпрограма, която пише във файл-отчет!");
|
||||
|
||||
#### Модули
|
||||
|
||||
# Модулът е набор от програмен код на Perl, обикновено подпрограми, който може
|
||||
# да бъде използван в друг програмен код на Perl. Обикновено се съхранява във
|
||||
# файл с разширение .pm, така че perl (програмата) да може лесно да го разпознае.
|
||||
|
||||
# В MyModule.pm
|
||||
package MyModule;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
sub trim {
|
||||
my $string = shift;
|
||||
$string =~ s/^\s+//;
|
||||
$string =~ s/\s+$//;
|
||||
return $string;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# От другаде:
|
||||
|
||||
use MyModule;
|
||||
MyModule::trim($string);
|
||||
|
||||
# Чрез модула Exporter може да направите функциите си износни, така че други
|
||||
# програми да могат да ги внасят (импортират).
|
||||
# Такива функции се използват така:
|
||||
|
||||
use MyModule 'trim';
|
||||
trim($string);
|
||||
|
||||
# Много Perl-модули могат да се свалят от CPAN (http://www.cpan.org/). Те
|
||||
# притежават редица полезни свойства, които ще ви помогнат да си свършите работа
|
||||
# без да откривате колелото. Голям брой известни модули като Exporter са включени
|
||||
# в дистрибуцията на самия Perl. Вижте perlmod за повече подробности, свързани с
|
||||
# модулите в Perl.
|
||||
|
||||
#### Обекти
|
||||
|
||||
# Обектите в Perl са просто референции, които знаят на кой клас (пакет)
|
||||
# принадлежат. По този начин методите (подпрограми), които се извикват срещу
|
||||
# тях могат да бъдат намерени в съответния клас. За да се случи това, в
|
||||
# конструкторите (обикновено new) се използва вградената функция
|
||||
# bless. Ако използвате обаче модули като Moose или Moo, няма да ви се налага
|
||||
# сами да извиквате bless (ще видите малко по-долу).
|
||||
|
||||
package MyCounter;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
sub new {
|
||||
my $class = shift;
|
||||
my $self = {count => 0};
|
||||
return bless $self, $class;
|
||||
}
|
||||
|
||||
sub count {
|
||||
my $self = shift;
|
||||
return $self->{count};
|
||||
}
|
||||
|
||||
sub increment {
|
||||
my $self = shift;
|
||||
$self->{count}++;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# Методите могат да се извикват на клас или на обект като се използва оператора
|
||||
# стрелка (->).
|
||||
|
||||
use MyCounter;
|
||||
my $counter = MyCounter->new;
|
||||
print $counter->count, "\n"; # 0
|
||||
$counter->increment;
|
||||
print $counter->count, "\n"; # 1
|
||||
|
||||
# Модулите Moose и Moo от CPAN ви помагат леснот да създавате класове. Те
|
||||
# предоставят готов конструктор (new) и прост синтаксис за деклариране на
|
||||
# свойства на обектите (attributes). Този клас може да се използва по същия начин
|
||||
# като предишния по-горе.
|
||||
|
||||
package MyCounter;
|
||||
use Moo; # внася strict и warnings
|
||||
|
||||
has 'count' => (is => 'rwp', default => 0, init_arg => undef);
|
||||
|
||||
sub increment {
|
||||
my $self = shift;
|
||||
$self->_set_count($self->count + 1);
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
# Обектно-ориентираното програмиране е разгледано по-задълбочено в perlootut,
|
||||
# а изпълнението му на ниско ниво в Perl е обяснено в perlobj.
|
||||
```
|
||||
|
||||
#### Често задавани въпроси (FAQ)
|
||||
|
||||
# perlfaq съдържа въпроси и отговори, отнасящи се до много общи задачи и предлага
|
||||
# за ползване добри модлули от CPAN, подходящи за решаване на различни проблеми.
|
||||
|
||||
#### Повече за четене
|
||||
- [Въведение в Perl](http://www.slideshare.net/kberov/01-intro-bg)
|
||||
- [PERL - Курс на МГУ "Св.Иван Рилски" (13 ЧАСТИ)](http://www.mgu.bg/drugi/ebooks/belchevski/perl.html)
|
||||
- [perl-tutorial](http://perl-tutorial.org/)
|
||||
- [Learn at www.perl.com](http://www.perl.org/learn.html)
|
||||
- [perldoc](http://perldoc.perl.org/)
|
||||
- и идващото с perl: `perldoc perlintro`
|
||||
|
Loading…
Reference in New Issue
Block a user