Здравствуйте!
Прошу простить, если вопрос глуп/странен и/или задан не в той ветке.
Ubuntu 10.10 (из-за проблем с графикой в новых версиях использую старую 10.10)
Есть файл DE-HB-poly.osm: <?xml version='1.0' encoding='UTF-8'?>
<osm version='0.5' upload='true' generator='JOSM'>
<node id='-9784' action='modify' visible='true' lat='53.140082629458526' lon='9.018268575809449' />
<node id='-9756' action='modify' visible='true' lat='53.03261128764498' lon='8.994253114069481' />
<node id='-9752' action='modify' visible='true' lat='53.100089028217134' lon='8.997726914794855' />
<node id='-9712' action='modify' visible='true' lat='53.234711034646104' lon='8.519149228573733' />
<node id='-9710' action='modify' visible='true' lat='53.19980925936167' lon='8.478721075236285' />
<node id='-9700' action='modify' visible='true' lat='53.095270652224514' lon='8.651187309648364' />
<node id='-9698' action='modify' visible='true' lat='53.03511953682501' lon='8.705255677372492' />
<node id='-9690' action='modify' visible='true' lat='53.235792404573786' lon='8.469335618054522' />
<node id='-9688' action='modify' visible='true' lat='53.19500602337247' lon='8.727322928900481' />
<node id='-9656' action='modify' visible='true' lat='53.220540523994444' lon='8.584147478912005' />
<node id='-9634' action='modify' visible='true' lat='53.0023273812199' lon='8.92082849997294' />
<way id='-9794' action='modify' visible='true'>
<nd ref='-9634' />
<nd ref='-9698' />
<nd ref='-9700' />
<nd ref='-9710' />
<nd ref='-9690' />
<nd ref='-9712' />
<nd ref='-9656' />
<nd ref='-9688' />
<nd ref='-9784' />
<nd ref='-9752' />
<nd ref='-9756' />
<nd ref='-9634' />
<tag k='note' v='created by poly2osm.pl from a polygon file. not for uploading!' />
<tag k='polygon_file' v='bremen' />
<tag k='polygon_id' v='1' />
</way>
</osm>
Есть скрипт osm2poly.pl: #!/usr/bin/perl
# script to convert an OSM file to a polygon file.
# the OSM file must follow certain conventions, namely
# each way must have a polygon_file and polygon_id tag,
# may have a note tag and must not have others.
#
# written by Frederik Ramm <frederik@remote.org>, public domain.
use strict;
my $poly_id;
my $poly_file;
my $polybuf;
my $outbuf;
my $nodes;
my $id=0;
while(<>)
{
if (/^\s*<node.*\sid=["']([0-9-]+)['"].*lat=["']([0-9.eE-]+)["'] lon=["']([0-9.eE-]+)["']/)
{
$nodes->{$1}=[$2,$3];
}
elsif (/^\s*<way /)
{
undef $poly_id;
undef $poly_file;
$polybuf = "";
}
elsif (defined($polybuf) && /k=["'](.*)["']\s*v=["'](.*?)["']/)
{
if ($1 eq "polygon_file")
{
$poly_file=$2;
}
elsif ($1 eq "polygon_id")
{
$poly_id=$2;
}
elsif ($1 ne "note")
{
die("cannot process tag '$1'");
}
}
elsif (/^\s*<nd ref=['"]([0-9-]+)["']/)
{
my $id=$1;
die("dangling reference to node $id") unless defined($nodes->{$id});
$polybuf .= sprintf(" %E %E\n", $nodes->{$id}->[1], $nodes->{$id}->[0]);
}
elsif (/^\s*<\/way/)
{
if (!defined($polybuf))
{
die("incomplete way definition");
}
$poly_id = ++$id unless defined($poly_id);
$outbuf .= "$poly_id\n$polybuf"."END\n";
undef $polybuf;
}
}
$poly_file = "polygon" unless defined($poly_file);
print "$poly_file\n$outbuf"."END\n";
Набираю в папке, в которой находятся оба файла: perl osm2poly.pl DE-HB-poly.osm -> DE-HB-poly.poly
Скрипт запускается, создаётся пустой файл DE-HB-poly.poly и... больше ничего не происходит. Выполнение продолжается и не завершается.
Помнится, когда я только поставил Ubuntu, я пробовал запускать этот скрипт, он не заработал. С perl-ом (по крайней мере - умышленно) я ничего не делал (не настраивал, не обновлял), но потом скрипт заработал. Сейчас я поставил 10.10 с нуля (пришлось переставить) - скрипт опять не работает.
Что может означать невыполнение/незавершение работы скрипта? Скрипт работал - факт. Может быть, в прошлый раз я как-то непредумышленно обновил perl и потому скрипт заработал? Можно ли как-нибудь заставить perl "объяснить", в чём затык? Файлы такого размера этим скриптом должны обрабатывать мгновенно.
Пробовал запускать c sudo - ничего не поменялось.