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;
}

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

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

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

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

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

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

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

Perl Facebook::Graph

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

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