Received: from mail.callnetuk.com ([195.13.89.5]) by hub.org (8.9.3/8.9.3) with SMTP id EAA60937 for ; Wed, 19 May 1999 04:11:39 -0400 (EDT) (envelope-from jscarfe@callnetuk.com) Received: from callnetuk.com (da134d56.dialup.callnetuk.com[212.67.134.56])by WHISKEY(MailMax 2.040) with ESMTP id 0 for jscarfe@callnetuk.com; Wed, 19 May 1999 09:21:17 +0100 GDT Message-ID: <37412C77.B1002B62@callnetuk.com> Date: Tue, 18 May 1999 10:01:43 +0100 From: Julian Scarfe X-Mailer: Mozilla 4.04 [en] (WinNT; I) MIME-Version: 1.0 To: selkovjr@mcs.anl.gov CC: pgsql-interfaces@postgreSQL.org Subject: Re: [INTERFACES] Paths in DBD::Pg References: <199905161628.LAA13696@antares.mcs.anl.gov> Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit selkovjr@mcs.anl.gov wrote: > > > I'd like to deal with geometrical data types, paths in particular, > > efficiently in Perl using Pg. But Pg, understadably I suppose, just > > returns a path as a scalar string like ((1,2),(3,4),(5,6)). Whereas > > I can 'eval' a point fairly efficiently, it's not very efficient to > > turn a long string such as the above into an array of arrays. > > You don't need to eval() individual points. If you eval() the whole > thing it will give you one single array: > > @a = eval "((1,2),(3,4),(5,6))"; > print "@a\n"; Sorry, the question wasn't very clear. For subsequent processing I need the path as an array of two-element array references representing individual points. At the moment I have a choice of: eval-ing the path into a flat array and then shifting them 2-by-2 into a suitable structure tr-ing the ()s into []s to make [[1,2],[3,4],[5,6]] and them eval-ing that. The tr-route is marginally quicker, but both feel inefficient and take a significant part of my processing time for paths of significant length. If there's nothing built into Pg for pulling out the structure in one go, I suppose it's time to get perlguts out... ;-) Julian