# БИБЛИОТЕКА Статистика Redmine Управление Критическая цепь Требования и IT Системная инженерия Стейкхолдеры Информация Социальные связи Экономика и общество Саморазвитие Логика, интеллект Сумма технологии ТЕСТИРОВАНИЕ Книги и ссылки QA и QC Цикл тестирования Тест план Тест-дизайн и покрытие Баг-репорт Уровни тестирования Виды тестирования Шаблоны документов XPATH Безопасность Нагрузочное Android Автоматизация Selenium WebDriver Генератор ИНН и т.п. РАЗРАБОТКА Ресурсы Цикл разработки ПО Continuous Integration OOP - базис Frontend HTTP/REST основы Apache web-server Регулярные выражения git Javascript Perl Python Полезности в Windows LINUX Ресурсы права, юзеры и группы crontab IP tables SSH консоль (терминал) tips & tricks useful apps БАЗЫ ДАННЫХ SQL MongoDB
Эта страница:
- Почерпнуть мудрость - CPAN - регулярка - поиск и замена - Mojolicious - ООП в Perl - DBI connection strings - всякое - Примеры скриптов - Часто используемые мною модули
Ещё в этом разделе:
РАЗРАБОТКА Фронтенд HTTP/REST основы Apache web-server Регулярные выражения git Javascript Perl Python Ruby Rust Полезности в Windows
Другие разделы:
# MONGO DB SQL РАЗРАБОТКА БИБЛИОТЕКА LINUX ТЕСТИРОВАНИЕ
Perl cheatsheet
Почерпнуть мудрость
CPAN
Апгрейд CPAN и всех установленных модулей до самой свежей версии: sudo perl -MCPAN -e 'upgrade' Насильная установка модуля в CPAN минуя тесты: force install clean <MODULE>::<submodule>
регулярка
.* ноль или больше любых символов. Синоним .{0,} .+ один или больше любых символов. Синоним .{1,} x? ноль или один символ 'x'. Синоним x{0,1} x* ноль или больше символов 'x'. Синоним x{0,} x+ один или больше символов 'x'. Синоним x{1,} [] только символ(ы), заключенные в [], например: [0-9] любая цифра в диапазоне от '0' до '9' [a-z] любая буква в диапазоне от 'a' до 'z' [a-zA-Z] любая буква в диапазоне от 'a' до 'z' или от 'A' до 'Z' [abc-], [-1] если нужен минус, то его нужно указать последним или первым [(+\\\]\t] внутри скобок нужно экранировать только ] и \ [^] все символы, КРОМЕ заключенных в [], например: [^0-9] любой символ, не входящий в диапазон от '0' до '9' [^a-z] любой символ, не входящий в диапазон от 'a' до 'z' x{} или [x]{} определённое количество символов подряд, например: x{m} ровно m символов x x{m,} по крайней мере m символов x x{m,n} от m до n символов x x{,n} до n (включительно) повторений символа x [a-z]{m} ровно m символов из диапазона от 'a' до 'z' По умолчанию квантификаторы жадные - захватывают максимально возможное число символов/сочетаний. Добавление ? делает их ленивыми - они захватывают минимально возможное. *? +? {m,n}? {m,}? /^1../ первый символ в строке /..9$/ последний символ в строке a|b|c 'a' или 'b' или 'c' () группировка символов (в Perl - заносит группу в спецпеременные $1, $2...), например: (abc) ищет сочетание abc (?=abc) позитивный поиск группы символов (группа должна присутствовать в искомой подстроке) (?!abc) негативный поиск группы символов (группа должна отсутствовать в искомой подстроке) (?:abc) т.н. non-capturing group - группа должна присутствовать в строке, но в результат её включать не надо \077 - восьмеричный символ \а - символ BEL (звонок) \b - начало или конец слова: слева(справа) - пусто или не буква/цифра, а справа(слева) - "слово" \B - не граница слова: слева(справа) - есть не-space символ \с[ - управляющие символы (комбинация Ctrl + символ, в данном случае это управляющий символ ESC) \d - одна цифра, то же, что и [0-9] \D - одна не-цифра, то же, что и [^0-9] \е - символ escape (ESC), \Е - конец действия команд \L, \U и \Q \f - символ прогона страницы (FF) \1 - следующая литера становится строчной (lowercase) \L - все последующие литеры становятся строчными вплоть до командй \Е \n - символ новой строки (LF, NL) \Q - вплоть до команды \Е все последующие метасимволы становятся обычными символами \r - символ перевода каретки (CR) \s - один space символ (пробел, горизонтальная/вертикальная табуляция, символ перевода каретки, новая строка и т.п.) \S - один не-space символ, то же что и [^\n\t\r\f] \t - символ горизонтальной табуляции (НТ, TAB) \u - следующая литера становится заглавной (uppercase) \U - все последующие литеры становятся заглавными вплоть до команды \E \v - символ вертикальной табуляции (VT) \w - алфавитно-цифровой символ (любая буква, цифра или символ подчеркивания) \W - любой символ, КРОМЕ букв, цифр и символа подчеркивания \x1B - шестнадцатиричный символ
поиск и замена
=~ /pattern/ (проверка соответствия строки маске) !~ /pattern/ (проверка НЕсоответствия строки маске) m/.../ - проверка совпадений (matching), ищет подстроку, совпадающую с указанным шаблоном, заданным регулярным выражением; После проверки в следующие переменные записывается: $1 - первое совпадение $2 - второе совпадение $+ - последнее совпадение $& - всё совпадение $` - всё до совпадения $' - всё после совпадения tr/.../ - замена текста (translation), заменяет выходной текст, но при этом он не использует регулярные выражения, осуществляя замену посимвольно; Пример: tr/iI/jJ/; # заменит символ i на j, а I на J s/.../.../ - выполняет подстановку (substitute) одних текстовых фрагментов вместо других, при помощи регулярных выражений; Эта функция заменяет часть строки, соответствующую PATTERN на REPLACE. $string=s/PATTERN/REPLACE/eg; Где 'e' и 'g' - необязательные параметры: g - заменяет все встречающиеся части строка, соответствующие PATTERN. Если этот параметр опущен - заменяет только первое соответствие. e - означает что REPLACE является выражением, а не просто строкой (в REPLACE содержатся переменные) Пример 1: $string="i:love:perl"; $string=~s/:/*/; # now $string="i*love:perl" $string=~s/:/*/; # now $string="i*love*perl" $string=~s/*/+/g; # now $string="i+love+perl" $string=~s/+/ /g; # now $string="i love perl" $string=~s/perl/cgi/; # now $string="i love cgi" Пример 2: $string="i love perl"; $string=~s/(love)/<$1>/; # теперь $string="i perl" # Здесь первое найденное слово "love" # присваивается переменной $1 Модификаторы (ставятся после второго слэша): /i игнорировать регистр /x игнорировать пропуски в шаблоне и разрешить комментарии /g заменить все одинаковые компоненты, а не один, как в отсутствии ключа g /gc не сбрасывается позиция при неудачном поиске. /s строка, в которой происходит поиск, состоит из одной строки /m строка, в которой происходит поиск, состоит из множества строк /o однократная компиляция /e правая часть s/// представляет собой выполняемый код Пример: $string="www22cgi44"; $string=~s/(\d+)/$1*3/eg; #сейчас $string="www66cgi132"; # Параметр 'e' показывает что $1*3 - вычисление, а не просто строка /ee правая часть s/// выполняется, после чего возвращаемое значение интерпретируется снова. ###################### Оператор q(text) заменяет строку text на строку, заключенную в одинарные кавычки(например если в q(text) поставить символ q(text\n), то напечатает text\n , т.е. \n это два символа, подобно print 'amam $file' напечатает amam $file). В данном случае почти все специальные символы не будут интерпретироваться внутри q(), исключая '\' $some=q(Don't may be); ###################### # Быстрая мультизамена my %replace = ( 'Water' => 'Вода', 'Wood' => 'Лес', 'Food' => 'Еда', ); my $regex = join "|", keys %replace; $regex = qr/$regex/; $something =~ s/($regex)/$replace{$1}/g;
Mojolicious

<% Строчный Perl %> <%= Выражение Perl, заменяемое результатом с XML экранированием %> <%== Выражение Perl, заменяемое результатом без какой-либо обработки %> <%# Комментарий, полезно для отладки %> % Строка Perl %= Строка выражения Perl, заменяемое результатом с XML экранированием %== Строка выражения Perl, заменяемое результатом без какой-либо обработки, НЕБЕЗОПАСНО при значениях принятых с клиента %# Строка комментария, полезно для отладки
Посмотреть header страницы, используя curl: curl -I http://localhost:48666/
ООП в Perl

Object Oriented Programming in PERL # Perl OOP rules # There are three important rules in Perl object oriented programming: # - A class is a package. # - An object is a reference that knows its class. # - A method is a subroutine. package Being; use strict; # which value should we return in case of not defined value my $nothing = 'VOID'; # In Perl, we use a subroutine or method named new() to construct the object. The subroutine name is not mandatory so you can use any subroutine name you want, but be consistent. # Whenever you call the summon() method, Perl automatically passes the class name Being as the first argument to the special array @_. sub summon { my ($class,$args) = @_; # The built-in function bless is used to bless the reference to the class and return an instance of the class. # The following illustrates the syntax of the bless() function: # object = bless reference, classname; #my $self = bless {align => $args->{align}, # name => $args->{name}, # age => $args->{age}, # # set start to the current time # start => time # }, $class; my $self = {start => time}; $self->{name} = $args->{name} if defined $args->{name}; $self->{align} = $args->{align} if defined $args->{align}; $self->{age} = $args->{age} if defined $args->{age}; bless $self, $class; return $self; } # get name of the being sub get_name { my $self = shift; return defined($self->{name}) ? $self->{name} : $nothing; } # set new name for the being sub set_name { my ($self,$new_name) = @_; $self->{name} = $new_name if defined($new_name); return $self->{name}; } # get age of the being sub get_age { my $self = shift; return defined($self->{age}) ? $self->{age} : $nothing; } # set age for the being sub set_age { my ($self,$new_age) = @_; $self->{age} = $new_age if defined($new_age); return $self->{age}; } # get align sub get_align { my $self = shift; return defined($self->{align}) ? $self->{align} : $nothing; } # set align sub set_align { my ($self,$new_align) = @_; $self->{align} = $new_align if defined($new_align); return $self->{align}; } # return all properties of object especially formatted sub to_string { my $self = shift; my $result; print "-"x15,"\n"; foreach my $s (keys %$self) { $self->{$s} = $nothing unless defined $self->{$s}; $result .= "$s: $self->{$s}\n"; } return $result; } # If invoked with arguments, then interpret them as key+value pairs # already existed key will be overwritten sub add { my $self = shift; if (@_) { my %extra = @_; @$self{keys %extra} = values %extra; } } # clear properties of object sub purify { my $self = shift; foreach my $s (keys %$self) { print "Destroying the \"$s\" property in the name of Free Memory!\n"; delete $self->{$s}; } } # Create a method named DESTROY. # This will be invoked when there are no more references to the object, or else when the program shuts down, whichever comes first. # You don't need to do any memory deallocation here, just any finalization code that makes sense for the class. sub DESTROY{ my $self = shift; printf("$self dying at %s\n", scalar localtime); } 1; ------------------------------------------------------------------------------------------------------------------------- package BeingChild; # родительский класс use base Being; use warnings; use strict; # переопределяем конструктор sub new { my($class) = @_; my $self = Being::new($class); $self->{name} = 'Diz iz BeingChild'; return $self; } # тут можно объявить дополнительные методы 1; ------------------------------------------------------------------------------------------------------------------------- use strict; use warnings; # use our Being class use Being; # We called the method summon() of the Being class and get an object $mammoth. # We passed a hash reference to the summon() method containing align, name and age. my $mammoth = Being->summon({ align =>'Chaotic Neutral', name => 'Mammoth', age => 30000}); # We called the method summon() of the Being class and get an object $quetza. # We passed a hash reference to the summon() method containing name, align and age. my $quetza = Being->summon({ name => 'Quetzalcoatle', align =>'Chaotic Neutral', age => 15231}); # Another possible syntax-way to call method summon() of the Being class and get an object $something with no arguments. my $something = summon Being(); # We called the method add() of the Being class to add some properties to $something object $something->add(leg2 => 'right', arm2 => 'left', name => 'sometheng'); # print properties by using corresponding method print $mammoth->to_string(); print $quetza->to_string(); print $something->to_string(); # print property print $something->{name}; # We called the method purify() of the Being class to clean object's properties $something->purify();
DBI connection strings

MySQL: use DBI; my $dbh = DBI->connect('DBI:mysql:database=information_schema;host=localhost;port=3306','root','rootpassword',{AutoCommit=>0,RaiseError=>1,PrintError=>1}) or die $DBI::errstr;

MSSQL windows login: use DBI; my $dbh = DBI->connect('DBI:ODBC:Driver={SQL Server};Server=11.11.111.111;UID=DOMAINNAME/LOGIN;PWD=PASSWORD') or die $DBI::errstr;

MSSQL windows authentication: use DBI; my $dbh = DBI->connect('DBI:ADO:Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=IP;Initial Catalog=DBNAME') or die $DBI::errstr;

всякое
CONTEXTS SIGILS ref ARRAYS HASHES void $scalar SCALAR @array %hash scalar @array ARRAY @array[0, 2] @hash{'a', 'b'} list %hash HASH $array[0] $hash{'a'} &sub CODE *glob GLOB SCALAR VALUES FORMAT number, string, ref, glob, undef REFERENCES \ reference $$foo[1] aka $foo->[1] $@%&* dereference $$foo{bar} aka $foo->{bar} [] anon. arrayref ${$$foo[1]}[2] aka $foo->[1]->[2] {} anon. hashref ${$$foo[1]}[2] aka $foo->[1][2] \() list of refs SYNTAX OPERATOR PRECEDENCE foreach (LIST) { } for (a;b;c) { } -> while (e) { } until (e) { } ++ -- if (e) { } elsif (e) { } else { } ** unless (e) { } elsif (e) { } else { } ! ~ \ u+ u- given (e) { when (e) {} default {} } =~ !~ * / % x NUMBERS vs STRINGS FALSE vs TRUE + - . = = undef, "", 0, "0" << >> + . anything else named uops == != eq ne < > <= >= lt gt le ge < > <= >= lt gt le ge == != <=> eq ne cmp ~~ <=> cmp & | ^ REGEX MODIFIERS REGEX METACHARS && /i case insensitive ^ string begin || // /m line based ^$ $ str end (bfr \n) .. ... /s . includes \n + one or more ?: /x ignore wh.space * zero or more = += last goto /p preserve ? zero or one , => /a ASCII /aa safe {3,7} repeat in range list ops /l locale /d dual | alternation not /u Unicode [] character class and /e evaluate /ee rpts \b word boundary or xor /g global \z string end /o compile pat once () capture DEBUG (?:p) no capture -MO=Deparse REGEX CHARCLASSES (?#t) comment -MO=Terse . [^\n] (?=p) ZW pos ahead -D## \s whitespace (?!p) ZW neg ahead -d:Trace \w word chars (?<=p) ZW pos behind \K \d digits (?<!p) ZW neg behind CONFIGURATION \pP named property (?>p) no backtrack perl -V:ivsize \h horiz.wh.space (?|p|p)branch reset \R linebreak (?<n>p)named capture \S \W \D \H negate \g{n} ref to named cap \K keep left part FUNCTION RETURN LISTS stat localtime caller SPECIAL VARIABLES 0 dev 0 second 0 package $_ default variable 1 ino 1 minute 1 filename $0 program name 2 mode 2 hour 2 line $/ input separator 3 nlink 3 day 3 subroutine $\ output separator 4 uid 4 month-1 4 hasargs $| autoflush 5 gid 5 year-1900 5 wantarray $! sys/libcall error 6 rdev 6 weekday 6 evaltext $@ eval error 7 size 7 yearday 7 is_require $$ process ID 8 atime 8 is_dst 8 hints $. line number 9 mtime 9 bitmask @ARGV command line args 10 ctime 10 hinthash @INC include paths 11 blksz 3..10 only @_ subroutine args 12 blcks with EXPR %ENV environment
Примеры скриптов
Часто используемые мною модули
Для некоторых модулей необходимо настроить локали. sudo locale-gen en_US sudo locale-gen en_US.UTF-8 sudo locale-gen ru_RU.UTF-8 sudo dpkg-reconfigure locales Обновляем модули для Perl'а из консоли CPAN (sudo нужно для доступа к записи файлов), заодно апгрейдим сам CPAN (может занять до 20 минут): sudo cpan upgrade install YAML install Mojolicious #для нижеследующей строки требуется установить пакет: sudo apt-get install build-essential install LWP::Simple install Mail::IMAPClient # для нижеследующей строки требуется force install Mojolicious::Plugin::ParamExpand force install Mojolicious::Plugin::FormFields # для нижеследующего требуется sudo apt-get install mongodb< install MongoDB # для нижеследующего требуется sudo apt-get install postgresql libdbd-mysql-perl libdbi-perl libdbd-pg-perl libpq-dev python-dev libmysql++-dev
# а также в CPAN'е: install Class::HPLOO install DBD install DBI install DBD::SQLite Math::GMP Math::Random::Secure # для нижеследующего требуется sudo apt-get install libgmp-dev openssl Net::SSH::Perl