Perl: функция форматирования денежных сумм

Функция выглядит следующим образом:

sub formating_money {
	my $num = shift;

	my $rounded = $num;
	if ($num =~ m|\.|) {
		$rounded = sprintf("%.2f", $num);
	}

	while ($rounded =~ s/^(-?\d+)(\d\d\d)/$1\n$2/){};

	return $rounded;
}

Проверка существования файла в Perl

Вы можете проверить, существует ли файл с помощью оператора -e.

my $file = '/path/file.pl';
if (-e $file) {
	print "file exists\n";
}

Пример простого telegram-бота на Perl

Рабочий perl-код с комметариями ниже. Описывать считаю бессмысленным, если ты перловик.

undefined

Perl: Тернарный оператор ?:

Когда Ларри выбирал, какие операторы должны быть доступны в Perl, он не захотел обижать бывших программистов C. А это значит, что в Perl переносится и самый запутанный оператор C – тернарный оператор ?:. Впрочем при всей запутанности он может быть весьма полезен. Тернарный оператор напоминает проверку ifQthenQelse, упакованную в одно выражение. Оператор называется «тернарным», потому что он получает три операнда. Оператор выглядит примерно так: 

выражение ? выражение_для_true : выражение_для_false

Абсолютный путь файла perl-скрипта

Бывает, когда нет ssh-доступа и возможности набрать команду pwd, нужно узнать полный путь к файлу. В данном случае выручает библиотека File::Spec.

Пример использования:

use File::Spec;
$path = File::Spec->rel2abs($0);

Perl: рандомный элемент из массива

Пример вывода случайного элемента из массива на Perl:

my @arr = ('foo', 'bar', 'baz');
print random(@arr);

sub random {
	my @values = @_;
	return $values[int rand scalar @values];
}

Работа с фреймворком Mojolicious

В тексте заметки несколько приемов работы с фреймворком Mojolicious, которые серьезно упрощают жизнь.

Ошибка при установке cpan-модуля: ! Can’t configure the distribution

Если при установке perl-модуля со cpan у вас возникает ошибка,

! Can’t configure the distribution. You probably need to have ‘make’. See /home/user/.cpanm/build.log for details.

то необходимо установить build-essential (informational list of build-essential packages).

Установка perl-модуля без root-доступа

С необходимостью установки модуля со CPAN я столкнулся при пользовании виртуальным хостингом без прав супер-пользователя (root).

В этом случае поможет local::lib.

wget http://search.cpan.org/CPAN/authors/id/H/HA/HAARG/local-lib-2.000017.tar.gz
tar zxf local-lib-2.000017.tar.gz
cd ~/local-lib-2.000017
perl Makefile.PL --bootstrap
make test && make install
echo 'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)' >>~/.bashrc

Постфиксное разыменование

Принят патч, который убирает статус экспериментальной у возможности постфиксного разыменования. Напомним, что постфиксное разыменование впервые появилось в Perl 5.20 и позволяет использовать новый синтаксис для разыменования:

$array_ref->@*; # вместо @{ $array_ref }
$hash_ref->%*;  # вместо %{ $hash_ref }

Пример работы с PostgreSQL в Perl

Подключение к PostgreSQL:

my $pg = Mojo::Pg->new; $pg->from_string('postgresql://[mylogin]:[mypassword]@[myhost]/[mydb]');

Добавление записи:

$pg->query('insert into mytable (name,age) values (?,?)', 'MyName', '10');

Удобный вид выбираемых данных:

$pg->query('select * from mytable where id = ?', 1)->hash; # хэш одной записи
$pg->query('select * from mytable')->hashes->to_array;     # массив хэшей

Установка и работа с PostgreSQL

Установка PostgreSQL в Ubuntu и perl-модуля Mojo::Pg для работы с ней.

undefined

Perl функции: bless

После выполнения функции bless() ссылка на субъект Perl (переменную, массив или хеш), определенная параметром ССЫЛКА, становиться ссылкой на объект, определяемый пакетом с именем, равным значению параметра ИМЯ_КЛАССА. Если этот параметр не задан, то подразумевается текущий пакет.Возвращаемое значение - ссылка на объект.

bless ССЫЛКА, ИМЯ_КЛАССА
bless ССЫЛКА

XML::LibXML. Создание xml-документа

Данный пример perl-кода, основанный на библиотеке XML::LibXML, генерирует xml-документ.

use XML::LibXML;
 
my $doc    = XML::LibXML::Document->new('1.0', 'utf-8');
my $create = $doc->createElement('object');
   $create->setAttribute('attribute', 'value');
   $doc->setDocumentElement($create);

my $document = $doc->createElement('tag');
   $create->appendChild($document);

my $name_doc = $doc->createElement('name');
   $name_doc->appendText('name');
   $document->appendChild($name_doc);

open my $out, '>', 'file.xml';
print {$out} $doc->toString(2);

Perl: парсинг gpx-трека

 Структура gpx-трека выглядит примерно таким образом. Внутри тега <trkpt> могут быть также time, ele.

<?xml version="1.0" encoding="utf-8"?>
<gpx>
    <trk>
        <name>Track</name>
        <trkseg>
            <trkpt lat="87.89289951324463" lon="41.97881025520548"></trkpt>
            <trkpt lat="87.7565735578537" lon="41.85182988575514"></trkpt>
        </trkseg>
    </trk>
</gpx>

CDATA с помощью XML::LibXML

CDATA (character data — символьные данные) используется в языках разметки XML для отображения символьных данных. Раздел CDATA начинается последовательностью символов "<![CDATA[" и заканчивается "]]>".

При создании xml-документов с CDATA на Perl я использую библиотеку XML::LibXML::CDATASection.

Рассмотрим пример: 

use XML::LibXML;

my $cdata = new XML::LibXML::CDATASection('symbols <>');
print $cdata->toString, "\n";
# результат: <![CDATA[symbols <>]]>

my $text = new XML::LibXML::Text('symbols <>');
print $text->toString, "\n";
# результат symbols &lt;&gt;

Perl: все файлы каталога

Задача:

Необходимо получить имена всех файлов каталога в массив @files.

Решение:

Откроем каталог функцией opendir и последовательно считаем имена файлов функцией readdir:

my $dir = '/home/dir_name';
my @files;

opendir(DIR, $dir) or die "can't opendir $dir: $!";

while (defined(my $file = readdir(DIR))) {
	next if $file =~ /^\.\.?$/;
	push @files, $file;
}

closedir(DIR);

Ошибка ImageMagick: Resource temporarily unavailable

Проблема:

При запуске скрипта с использованием ImageMagick на виртуальном хостинге возникла ошибка:

libgomp: Thread creation failed: Resource temporarily unavailable

ImageMagick использует алгоритм, который может выполняться в нескольких параллельных потоках. Но на виртуальном хостинге каждому пользователю выделяется определённое количество потоков, превысить которое он не может и если это произойдет - возникает ошибка «Thread creation failed: Resource temporarily unavailable».

Регулярные выражения Perl

Несколько примеров регулярных выражений.

LWP::UserAgent и кириллические .рф

На cpan есть прекрасный и хорошо вам знакомый модуль LWP::UserAgent

Запустив нижеследующий тестовый скрипт с кириллическим доменом вида http://россия.рф, мы получим 500-ую ошибку вида: 500 Can't connect to xn--aca0d8k7a0jdddbd.xn--ai3ub:80 (Bad hostname)

require LWP::UserAgent;
 
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
 
my $response = $ua->get('http://россия.рф/');
 
if ($response->is_success) {
	print $response->decoded_content;
}
else {
	die $response->status_line;
}

Форматирование SQL-запросов

Не только следует форматировать программный код, но и SQL-запросы к базе данных. В отформатированный запросе гораздо быстрее и легче понять, что и откуда берется, не только другим программистам, но и, собственно вам самим (через N-ое время).

Perl: регулярные выражения для работы с URL

В очередной раз язык Perl доказывает свою гибкость, универсальность. Как поговаривал Ларри Уолл: "Это можно сделать разными способами". Под катом несколько примеров работы с URL-адресами.

perl регулярные выражения url

Стандарты кодирования Perl: Лаконичность кода

Серия постов "Стандарты кодирования Perl". Часть 5: Лаконичность кода.

Facebook::Graph. Добавление поста, фотографии

Пройдя регистрацию API-пролежения, собственно, необходимо попробовать его возможности на небольшом примере. Естественно, на Perl.

Perl Facebook::Graph

Стандарты кодирования Perl: Безопасность и надёжность кода

Серия постов "Стандарты кодирования Perl". Часть 4: Безопасность и надёжность кода.

Удаление perl-модуля

Ранее размещал пост о том, как просмотреть список установленных perl-модулей со CPAN. В данном материале речь зайдет о удалении CPAN-модулей.

Делается это очень просто. Создадим скрипт delete.pl с содержимым:

#!/usr/local/bin/perl -w

use ExtUtils::Packlist;
use ExtUtils::Installed;

$ARGV[0] or die "Usage: $0 Module::Name\n";

my $mod = $ARGV[0];

my $inst = ExtUtils::Installed->new();

foreach my $item (sort($inst->files($mod))) {
    print "removing $item\n";
    unlink $item;
}
                   
my $packfile = $inst->packlist($mod)->packlist_file();
print "removing $packfile\n";
unlink $packfile;

И запустим его с root-правами, указав удаляемый модуль:

sudo perl delete.pl Module::Name

Perl: операторы q и qq

Имея большой объем текста, в нем, наверняка, присутствует большое количество кавычек. Перед каждой необходимо ставить обратный слеш (\) для того, чтобы интерпретатор понимал, что это символ в тексте.

Для примера взял кусок placeholder-текста и повставлял произвольно экранируемые кавычки.

Lorem \"ipsum\" dolor sit amet, consectetur adipisicing \"elit\", sed do eiusmod tempor \"incididunt\" ut labore et dolore magna \"aliqua\".

Муторно. Поэтому для квотинга кавычек и апострофов предусмотрены строковые операторы q и qq:

$text = qq/Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua./;

Экранирование апострофов:

$text = q/Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua./;

Удаление Perl модуля

С установкой perl-модулей отлично справляется утилита cpanm. А как насчет удаления? С эти вопросом поможет App::pmuninstall. Ставим.

cpanm App::pmuninstall

Пример:

pm-uninstall Perl::Module

Список установленных модулей CPAN

Чтобы посмотреть список установленных модулей CPAN, необходимо запустить perl-скрипт:

#!/usr/local/bin/perl

use ExtUtils::Installed;
my $instmod = ExtUtils::Installed->new();
foreach my $module ($instmod->modules()) {
    my $version = $instmod->version($module) || "???";
    print "$module -- $version\n";
}

Стандарты кодирования Perl: регулярные выражения

Серия постов "Стандарты кодирования Perl". Часть 3: Регулярные выражения

«Есть несколько способов это сделать». (c) Larry Wall

Стандарты кодирования Perl: переменные и константы

Серия постов "Стандарты кодирования Perl". Часть 2: Переменные и константы.

Стандарты кодирования Perl: оформление кода

Серия постов "Стандарты кодирования Perl". Часть 1: Оформление кода

perl coding

«Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня.» (c) Larry Wall

Perl-редактор: немного юмора

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

perl редактор юмор

«Программировать на Perl - это как есть палочками: непривычно и многие считают это глупостью, другие же наслаждаются удобством и простотой.»

Регулярные выражения Perl

Данный пост включает в себя примеры регулярных выражений на perl, которыми мы так часто пользуемся в разработке web-приложений. Добро пожаловать под кат.

регулярные выражения perl

Логирование с Log::Log4perl и ротацией файлов

Библиотека Log::Log4perl имеет довольно обширные возможности и позволяет настроить логирование под свои потребности.

Log::Dispatch::FileRotate позволяет ротировать файлы. Можно настроить максимальный размер файла (по умолчанию 10 Mb), максимальное число файлов.

Вставка таблицы. PDF::Table

В продолжении поста о создании pdf-файла по средством PDF::API2, рассмотрим пример вставки таблицы, используя вышеупомянутый модуль и PDF::Table.

Конвертация даты в unixtime и обратно на Perl

Доброго дня, читатели блога Re:Notes! Сегодня речь зайдет о времени в *nix-подобных системах. В Perl моменты времени представлены в виде интервалов, измеряемых в секундах с некоторого момента, называемого началом эпохи.

Создание pdf-файла с помощью PDF::API2

Модуль PDF::API2 предназначен для создания новых документов на языке Perl и не дает возможностей полноценного редактирования уже существующих. Поиск текста, замена и т.п.

Но с "простым" редактированием текста модуль справляется успешно. К примеру, при заполнении шаблонной документации (квитанции, бланки).

Наложение водяного знака (логотипа) на фото с помощью ImageMagick

С помощью ImageMagick очень просто реализовать копирайтинг изображений, дабы предотвратить кражу Ваших работ в графическом виде. В качестве исходного изображения возьмем изображение, содранное из сети и предположим, что оно наше. Логотип - *.png файл с изображением бабочки.

Стили / парадигмы программирования языка Perl

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

Perl - краткая справка

Язык Perl (PEARL ⇒ PERL) «Practical Extraction and Report Language» появился в 1987 г. (уже справили 25-ти летие), автором является Larry Wall. Проектировался как более мощная замена AWK. Суффиксы файлов — .pl, .pm, .t.

Почему Perl?

Почему мы выбираем язык Perl для разработки наших сервисов? Ответ в принципе очень прост, подумайте, что есть Internet. Интернет это колоссальная цифровая магистраль, система, которая связывает между собой тысячи сетей во всём мире, к которым подключены миллионы компьютеров. Проще говоря, это сеть сетей. В данном случае нас интересуют web-серверы, обеспечивающие предоставление web-документов из которых состоят сайты. Большая часть пользователей сети Internet, используют его для получения информации, находящихся на этих сайтах. Это значит, что главная наша задача это работа с огромными потоками различной информации, а что может быть лучше для её обработки как ни Perl?

Resize изображения при помощи ImageMagick

Как говорит нам Википедия, ImageMagick — свободный и многоплатформенный пакет программ для неинтерактивной (пакетной) обработки графических файлов. Может использоваться с языками Perl, C, C++, Python, Ruby, PHP, Pascal, Java, в скриптах командной оболочки или самостоятельно.

Коротко и просто о SPLIT, JOIN и GREP, MAP

В рассмотренных ниже примерах Вы можете ознакомиться с функциями обработки списков grep, map, split, join. Так же эффективно их использование с регулярными выражениями.

Работа с cookies на Perl

Cookies - небольшие файлы сохраняемые на машине клиента, позволяющие хранить персональную информацию для каждого пользователя на стороне клиента. В Perl для работы с Cookies используется модуль CGI::Cookie.

Описание Mojolicious

Первый пост по этой тематики - описание фреймворка Mojolicious. На заре развития всемирной паутины, многие люди изучали Perl потому, что существовала прекрасная библиотека Perl, называемая CGI. Она была достаточно проста, чтобы начать работу без особого знания языка и достаточно мощна, чтобы с увлечением продолжать изучать язык.