Функция выглядит следующим образом:
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;
}
Функция выглядит следующим образом:
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;
}
Вы можете проверить, существует ли файл с помощью оператора -e.
my $file = '/path/file.pl';
if (-e $file) {
print "file exists\n";
}
Рабочий perl-код с комметариями ниже. Описывать считаю бессмысленным, если ты перловик.
Когда Ларри выбирал, какие операторы должны быть доступны в Perl, он не захотел обижать бывших программистов C. А это значит, что в Perl переносится и самый запутанный оператор C – тернарный оператор ?:. Впрочем при всей запутанности он может быть весьма полезен. Тернарный оператор напоминает проверку ifQthenQelse, упакованную в одно выражение. Оператор называется «тернарным», потому что он получает три операнда. Оператор выглядит примерно так:
выражение ? выражение_для_true : выражение_для_false
Бывает, когда нет ssh-доступа и возможности набрать команду pwd, нужно узнать полный путь к файлу. В данном случае выручает библиотека File::Spec.
Пример использования:
use File::Spec;
$path = File::Spec->rel2abs($0);
Пример вывода случайного элемента из массива на Perl:
my @arr = ('foo', 'bar', 'baz');
print random(@arr);
sub random {
my @values = @_;
return $values[int rand scalar @values];
}
В тексте заметки несколько приемов работы с фреймворком Mojolicious, которые серьезно упрощают жизнь.
Если при установке 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).
С необходимостью установки модуля со 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:
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 в Ubuntu и perl-модуля Mojo::Pg для работы с ней.
После выполнения функции bless() ссылка на субъект Perl (переменную, массив или хеш), определенная параметром ССЫЛКА, становиться ссылкой на объект, определяемый пакетом с именем, равным значению параметра ИМЯ_КЛАССА. Если этот параметр не задан, то подразумевается текущий пакет.Возвращаемое значение - ссылка на объект.
bless ССЫЛКА, ИМЯ_КЛАССА
bless ССЫЛКА
Данный пример 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);
Структура 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 (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 <>
Задача:
Необходимо получить имена всех файлов каталога в массив @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 на виртуальном хостинге возникла ошибка:
libgomp: Thread creation failed: Resource temporarily unavailable
ImageMagick использует алгоритм, который может выполняться в нескольких параллельных потоках. Но на виртуальном хостинге каждому пользователю выделяется определённое количество потоков, превысить которое он не может и если это произойдет - возникает ошибка «Thread creation failed: Resource temporarily unavailable».
Несколько примеров регулярных выражений.
На 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-запросы к базе данных. В отформатированный запросе гораздо быстрее и легче понять, что и откуда берется, не только другим программистам, но и, собственно вам самим (через N-ое время).
В очередной раз язык Perl доказывает свою гибкость, универсальность. Как поговаривал Ларри Уолл: "Это можно сделать разными способами". Под катом несколько примеров работы с URL-адресами.
Серия постов "Стандарты кодирования Perl". Часть 5: Лаконичность кода.
Пройдя регистрацию API-пролежения, собственно, необходимо попробовать его возможности на небольшом примере. Естественно, на Perl.
Серия постов "Стандарты кодирования Perl". Часть 4: Безопасность и надёжность кода.
Ранее размещал пост о том, как просмотреть список установленных 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
Имея большой объем текста, в нем, наверняка, присутствует большое количество кавычек. Перед каждой необходимо ставить обратный слеш (\) для того, чтобы интерпретатор понимал, что это символ в тексте.
Для примера взял кусок 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-модулей отлично справляется утилита cpanm. А как насчет удаления? С эти вопросом поможет App::pmuninstall. Ставим.
cpanm App::pmuninstall
Пример:
pm-uninstall Perl::Module
Чтобы посмотреть список установленных модулей 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". Часть 3: Регулярные выражения
Серия постов "Стандарты кодирования Perl". Часть 2: Переменные и константы.
Серия постов "Стандарты кодирования Perl". Часть 1: Оформление кода
«Многие из вас знакомы с достоинствами программиста. Их всего три, и разумеется это: лень, нетерпеливость и гордыня.» (c) Larry Wall
В сети увидел вот такое изображение и по символам узнал родной язык. Пожалуй, это самая лучшая среда разработки для Perl.
«Программировать на Perl - это как есть палочками: непривычно и многие считают это глупостью, другие же наслаждаются удобством и простотой.»
Данный пост включает в себя примеры регулярных выражений на perl, которыми мы так часто пользуемся в разработке web-приложений. Добро пожаловать под кат.
Библиотека Log::Log4perl имеет довольно обширные возможности и позволяет настроить логирование под свои потребности.
Log::Dispatch::FileRotate позволяет ротировать файлы. Можно настроить максимальный размер файла (по умолчанию 10 Mb), максимальное число файлов.
В продолжении поста о создании pdf-файла по средством PDF::API2, рассмотрим пример вставки таблицы, используя вышеупомянутый модуль и PDF::Table.
Доброго дня, читатели блога Re:Notes! Сегодня речь зайдет о времени в *nix-подобных системах. В Perl моменты времени представлены в виде интервалов, измеряемых в секундах с некоторого момента, называемого началом эпохи.
Модуль PDF::API2 предназначен для создания новых документов на языке Perl и не дает возможностей полноценного редактирования уже существующих. Поиск текста, замена и т.п.
Но с "простым" редактированием текста модуль справляется успешно. К примеру, при заполнении шаблонной документации (квитанции, бланки).
С помощью ImageMagick очень просто реализовать копирайтинг изображений, дабы предотвратить кражу Ваших работ в графическом виде. В качестве исходного изображения возьмем изображение, содранное из сети и предположим, что оно наше. Логотип - *.png файл с изображением бабочки.
Парадигма программирования — это совокупность подходов, методов, стратегий, идей и понятий, определяющая стиль написания программ и в современной индустрии программирования очень часто определяется набором инструментов программиста (язык программирования и операционная система).
Язык Perl (PEARL ⇒ PERL) «Practical Extraction and Report Language» появился в 1987 г. (уже справили 25-ти летие), автором является Larry Wall. Проектировался как более мощная замена AWK. Суффиксы файлов — .pl, .pm, .t.
Почему мы выбираем язык Perl для разработки наших сервисов? Ответ в принципе очень прост, подумайте, что есть Internet. Интернет это колоссальная цифровая магистраль, система, которая связывает между собой тысячи сетей во всём мире, к которым подключены миллионы компьютеров. Проще говоря, это сеть сетей. В данном случае нас интересуют web-серверы, обеспечивающие предоставление web-документов из которых состоят сайты. Большая часть пользователей сети Internet, используют его для получения информации, находящихся на этих сайтах. Это значит, что главная наша задача это работа с огромными потоками различной информации, а что может быть лучше для её обработки как ни Perl?
Как говорит нам Википедия, ImageMagick — свободный и многоплатформенный пакет программ для неинтерактивной (пакетной) обработки графических файлов. Может использоваться с языками Perl, C, C++, Python, Ruby, PHP, Pascal, Java, в скриптах командной оболочки или самостоятельно.
В рассмотренных ниже примерах Вы можете ознакомиться с функциями обработки списков grep, map, split, join. Так же эффективно их использование с регулярными выражениями.
Cookies - небольшие файлы сохраняемые на машине клиента, позволяющие хранить персональную информацию для каждого пользователя на стороне клиента. В Perl для работы с Cookies используется модуль CGI::Cookie.
Первый пост по этой тематики - описание фреймворка Mojolicious. На заре развития всемирной паутины, многие люди изучали Perl потому, что существовала прекрасная библиотека Perl, называемая CGI. Она была достаточно проста, чтобы начать работу без особого знания языка и достаточно мощна, чтобы с увлечением продолжать изучать язык.
Renotes © 2012 -
Заметки web-разработчиков ·RSS