[30141] in Perl-Users-Digest
Perl-Users Digest, Issue: 1384 Volume: 11
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Sat Mar 22 11:09:41 2008
Date: Sat, 22 Mar 2008 08:09:06 -0700 (PDT)
From: Perl-Users Digest <Perl-Users-Request@ruby.OCE.ORST.EDU>
To: Perl-Users@ruby.OCE.ORST.EDU (Perl-Users Digest)
Perl-Users Digest Sat, 22 Mar 2008 Volume: 11 Number: 1384
Today's topics:
complete pattern matching <ela@yantai.org>
Re: complete pattern matching <mgjv@tradingpost.com.au>
Re: complete pattern matching <mgjv@tradingpost.com.au>
Re: complete pattern matching <jurgenex@hotmail.com>
Re: FAQ 6.21 What's wrong with using grep in a void con <benkasminbullock@gmail.com>
Re: FAQ 6.21 What's wrong with using grep in a void con <hjp-usenet2@hjp.at>
new CPAN modules on Sat Mar 22 2008 (Randal Schwartz)
Re: Perl code to fill-in online form <joost@zeekat.nl>
Re: Perl code to fill-in online form <benkasminbullock@gmail.com>
Re: strategys other than subroutine and OO? <hjp-usenet2@hjp.at>
XML to Database worlman385@yahoo.com
Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: Sat, 22 Mar 2008 14:10:47 +0800
From: "Ela" <ela@yantai.org>
Subject: complete pattern matching
Message-Id: <fs27t8$e72$1@ijustice.itsc.cuhk.edu.hk>
By using the following codes:
if ($aref1->[3] =~ /$tomatch/i) {
print "A:$tomatch\tB:$aref1->[3]\n";
<STDIN>;
last;
}
I discover that the program gives me a match for the following pair:
A:conserved hypothetical B:CONSERVED HYPOTHETICAL W
Indeed I expect that is a mismatch (but not the other way round for matching
A with B). How to enforce matching the whole expresson (i.e. including the
"W" in this case) ?
------------------------------
Date: Sat, 22 Mar 2008 17:55:32 +1100
From: Martien Verbruggen <mgjv@tradingpost.com.au>
Subject: Re: complete pattern matching
Message-Id: <slrnfu9bb4.8gr.mgjv@martien.heliotrope.home>
On Sat, 22 Mar 2008 14:10:47 +0800,
Ela <ela@yantai.org> wrote:
>
> By using the following codes:
>
> if ($aref1->[3] =~ /$tomatch/i) {
> print "A:$tomatch\tB:$aref1->[3]\n";
> <STDIN>;
> last;
> }
>
> I discover that the program gives me a match for the following pair:
>
> A:conserved hypothetical B:CONSERVED HYPOTHETICAL W
>
> Indeed I expect that is a mismatch (but not the other way round for matching
> A with B). How to enforce matching the whole expresson (i.e. including the
> "W" in this case) ?
Anchor it at the front and back with ^ and $, or \A and \z. See the
perlre doucmentation for details.
But if you want to test for equality, it might be faster to simply
lowercase (or uppercase) both strings, and test with eq. If you know
that one of your astrings is always entirely upper or lower case, it
becomes even cheaper to do.
if (lc $aref1->[3] eq lc $tomatch) { ... }
Martien
--
|
Martien Verbruggen | Freudian slip: when you say one thing but
| mean your mother.
|
------------------------------
Date: Sat, 22 Mar 2008 17:59:14 +1100
From: Martien Verbruggen <mgjv@tradingpost.com.au>
Subject: Re: complete pattern matching
Message-Id: <slrnfu9bi2.8gr.mgjv@martien.heliotrope.home>
On Sat, 22 Mar 2008 14:10:47 +0800,
Ela <ela@yantai.org> wrote:
>
> By using the following codes:
>
> if ($aref1->[3] =~ /$tomatch/i) {
> print "A:$tomatch\tB:$aref1->[3]\n";
> <STDIN>;
> last;
> }
>
> I discover that the program gives me a match for the following pair:
>
> A:conserved hypothetical B:CONSERVED HYPOTHETICAL W
>
> Indeed I expect that is a mismatch (but not the other way round for matching
> A with B). How to enforce matching the whole expresson (i.e. including the
> "W" in this case) ?
Anchor it at the front and back with ^ and $, or \A and \z. See the
perlre doucmentation for details.
But if you want to test for equality, it might be faster and more
readable to simply lowercase (or uppercase) both strings, and test with
eq. If you know that one of your astrings is always entirely upper or
lower case, it becomes even cheaper to do.
if (lc $aref1->[3] eq lc $tomatch) { ... }
Martien
--
|
Martien Verbruggen | Freudian slip: when you say one thing but
| mean your mother.
|
------------------------------
Date: Sat, 22 Mar 2008 14:04:22 GMT
From: Jürgen Exner <jurgenex@hotmail.com>
Subject: Re: complete pattern matching
Message-Id: <k34au3pm435hf3u06i4hvrk4lltbqd7mok@4ax.com>
"Ela" <ela@yantai.org> wrote:
>By using the following codes:
>
>if ($aref1->[3] =~ /$tomatch/i) {
> print "A:$tomatch\tB:$aref1->[3]\n";
> <STDIN>;
> last;
>}
>
>I discover that the program gives me a match for the following pair:
>
>A:conserved hypothetical B:CONSERVED HYPOTHETICAL W
>
>Indeed I expect that is a mismatch (but not the other way round for matching
>A with B). How to enforce matching the whole expresson (i.e. including the
>"W" in this case) ?
If you really want RE matching then just anchor the search pattern ("^" and
"$").
If you just want to compare the two strings then comparing ("eq") their e.g.
lower case normal forms would be easier and faster and actually yield
correct results even in case the pattern contains RE special characters.
jue
------------------------------
Date: Sat, 22 Mar 2008 05:08:29 +0000 (UTC)
From: Ben Bullock <benkasminbullock@gmail.com>
Subject: Re: FAQ 6.21 What's wrong with using grep in a void context?
Message-Id: <fs248d$5hq$1@ml.accsnet.ne.jp>
On Fri, 21 Mar 2008 17:45:39 -0500, brian d foy wrote:
> ... grep makes no sense in void context because it
> exists to output a list. Although the Perl internals might recognize and
> optimize that, why should we have to clutter Perl with optimizations for
> people doing the wrong thing? It's dump that we had to do it with map()
> because so many people were doing it wrong.
>
> If you want to go a list to run some block of code, use foreach(). That
> can be optimized for the task. Making map and grep do things they
> weren't designed for is just needless complexity.
I found an interesting discussion about this:
http://www.nntp.perl.org/group/perl.perl5.porters/2007/12/msg131922.html
As far as I can understand that discussion, it seems that in the future,
#!/usr/bin/perl
use warnings;
use strict;
sub fruit {print join (':',caller), " is nutty\n" if !defined(wantarray)}
my $x = fruit;
fruit;
my @eggs = map {fruit} 1..2;
map {fruit} 1..2;
grep {fruit} 1..2;
which currently prints
ben ~ 647 $ ./wantarray.pl
main:./wantarray.pl:6 is nutty
is, in the future, going to print errors at lines six, eight and nine.
------------------------------
Date: Sat, 22 Mar 2008 11:23:11 +0100
From: "Peter J. Holzer" <hjp-usenet2@hjp.at>
Subject: Re: FAQ 6.21 What's wrong with using grep in a void context?
Message-Id: <slrnfu9ngf.t39.hjp-usenet2@hrunkner.hjp.at>
On 2008-03-21 22:45, brian d foy <brian.d.foy@gmail.com> wrote:
> In article <frvbn902r5m@news2.newsguy.com>, szr <szrRE@szromanMO.comVE>
> wrote:
>> PerlFAQ Server wrote:
>> > 6.21: What's wrong with using grep in a void context?
>> >
>> > The problem is that grep builds a return list, regardless of the
>> > context. This means you're making Perl go to the trouble of
>> > building a list that you then just throw away. If the list is
>> > large, you waste both time and space. If your intent is to iterate
>> > over the list, then use a for loop for this purpose.
>> >
>> > In perls older than 5.8.1, map suffers from this problem as well.
>> > But since 5.8.1, this has been fixed, and map is context aware -
>> > in void context, no lists are constructed.
>>
>> So why not simply make grep context aware too? Seems grep would benefit
>> from this just as much, if not more, as map.
>
> You're missing the point. grep makes no sense in void context because
> it exists to output a list.
The same is true for map. If it makes no sense for grep, then it also
doesn't make sense for map. Conversely, if it does make sense for map,
then it also makes sense for grep.
> Although the Perl internals might recognize and optimize that, why
> should we have to clutter Perl with optimizations for people doing the
> wrong thing? It's dump that we had to do it with map() because so many
> people were doing it wrong.
>
> If you want to go a list to run some block of code, use foreach().
I fully agree with this. foreach is right tool for the job.
However, the wording of the FAQ suggests to me that *conceptually* its
completely ok to use grep or map instead of foreach, you just shouldn't
do it for performance reasons (and as of 5.8.1, map has been "fixed", so
use map instead of foreach at will. TIMTOWTDI! Yeah!).
So I'd rather write that the other way around:
When grep (or map) is used in a void context, its return value is
discarded. All that remains is the loop over its input list.
Therefore
grep { X } @arr
and
map { X } @arr
do ultimately the same thing as
do { X } for @arr;
but the latter is clearer.
Also, grep (and before perl 5.8.1, also map) builds the return list
even in void context, so using the for loop is likely to be faster,
too.
On a related note, I agree with szr that grep should be optimized for
scalar context. Constructs like
my $num_matches = grep /foo/ @arr;
or
if (grep /foo/ @arr) { ... }
are quite common. Instead of building a list, a simple counter can be
used. In the second case, grep could even short-circuit and return true
after the first match (although that is likely to break existing code
which relies on side-effects).
hp
------------------------------
Date: Sat, 22 Mar 2008 04:42:20 GMT
From: merlyn@stonehenge.com (Randal Schwartz)
Subject: new CPAN modules on Sat Mar 22 2008
Message-Id: <Jy47qK.1FuA@zorch.sf-bay.org>
The following modules have recently been added to or updated in the
Comprehensive Perl Archive Network (CPAN). You can install them using the
instructions in the 'perlmodinstall' page included with your Perl
distribution.
Acme-Shorten-ZoffixsModuleNames-0.001
http://search.cpan.org/~zoffix/Acme-Shorten-ZoffixsModuleNames-0.001/
use Zoffix Znet's modules without those uberly long names *har* *har*
----
App-MadEye-0.03
http://search.cpan.org/~tokuhirom/App-MadEye-0.03/
enterprise-class monitoring solutions
----
App-MadEye-0.04
http://search.cpan.org/~tokuhirom/App-MadEye-0.04/
enterprise-class monitoring solutions
----
BS-Event-0.2
http://search.cpan.org/~elmex/BS-Event-0.2/
A class that provides an event callback interface
----
BS-Event-0.3
http://search.cpan.org/~elmex/BS-Event-0.3/
A class that provides an event callback interface
----
CDB_File-0.96
http://search.cpan.org/~msergeant/CDB_File-0.96/
Perl extension for access to cdb databases
----
CPAN-Site-0.19
http://search.cpan.org/~markov/CPAN-Site-0.19/
CPAN.pm subclass for adding site local modules
----
Catalyst-Model-Jifty-DBI-0.04
http://search.cpan.org/~ishigaki/Catalyst-Model-Jifty-DBI-0.04/
Jifty::DBI Model Class with some magic on top
----
Catalyst-Plugin-HashedCookies-1
http://search.cpan.org/~oliver/Catalyst-Plugin-HashedCookies-1/
Tamper-resistant HTTP Cookies
----
Config-AutoConf-0.07
http://search.cpan.org/~ambs/Config-AutoConf-0.07/
A module to implement some of AutoConf macros in pure perl.
----
DBD-Pg-2.4.0
http://search.cpan.org/~turnstep/DBD-Pg-2.4.0/
PostgreSQL database driver for the DBI module
----
DBIx-InterpolationBinding-1.00
http://search.cpan.org/~lukeross/DBIx-InterpolationBinding-1.00/
Perl extension for turning perl double-quote string interpolation into DBI bind parameters.
----
DBIx-StORM-0.06
http://search.cpan.org/~lukeross/DBIx-StORM-0.06/
Perl extension for object-relational mapping
----
Devel-Events-0.05
http://search.cpan.org/~nuffin/Devel-Events-0.05/
Extensible instrumentation framework.
----
Games-Go-GTP-0.03
http://search.cpan.org/~deg/Games-Go-GTP-0.03/
Interact with a server or Go playing program using GTP
----
Games-Go-Referee-0.04
http://search.cpan.org/~deg/Games-Go-Referee-0.04/
Check the moves of a game of Go for rule violations.
----
Games-Go-SGF-0.07
http://search.cpan.org/~deg/Games-Go-SGF-0.07/
Parse and dissect Standard Go Format files
----
Geo-Ellipsoid-1.0
http://search.cpan.org/~jgibson/Geo-Ellipsoid-1.0/
Calculate positions, distances, and bearings on the surface of an ellipsoid.
----
HTTP-Server-Simple-Dispatched-0.05
http://search.cpan.org/~frodwith/HTTP-Server-Simple-Dispatched-0.05/
Django-like regex dispatching with request and response objects - no CGI.pm cruft!
----
Lingua-Jspell-1.50_04
http://search.cpan.org/~ambs/Lingua-Jspell-1.50_04/
Perl interface to the Jspell morphological analyser.
----
Lingua-Translit-0.06
http://search.cpan.org/~alinke/Lingua-Translit-0.06/
transliterates text between writing systems
----
Lingua-Translit-0.07
http://search.cpan.org/~alinke/Lingua-Translit-0.07/
transliterates text between writing systems
----
MIME-EncWords-1.007
http://search.cpan.org/~nezumi/MIME-EncWords-1.007/
deal with RFC 2047 encoded words (improved)
----
Net-MirrorDir-0.17
http://search.cpan.org/~knorr/Net-MirrorDir-0.17/
Perl extension for compare local-directories and remote-directories with each other
----
Net-Write-1.03
http://search.cpan.org/~gomor/Net-Write-1.03/
a portable interface to open and send raw data to network
----
Net-XMPP2-0.11
http://search.cpan.org/~elmex/Net-XMPP2-0.11/
An implementation of the XMPP Protocol
----
Osgood-Client-1.1.0
http://search.cpan.org/~gphat/Osgood-Client-1.1.0/
Client for the Osgood Passive, Persistent Event Queue
----
Osgood-Server-1.1.0
http://search.cpan.org/~gphat/Osgood-Server-1.1.0/
Event Repository
----
Oxford-Calendar-2.01
http://search.cpan.org/~dom/Oxford-Calendar-2.01/
University of Oxford calendar conversion routines
----
POE-Component-IRC-5.72
http://search.cpan.org/~bingos/POE-Component-IRC-5.72/
a fully event-driven IRC client module.
----
POE-Component-IRC-Plugin-HTML-ElementInfo-0.001
http://search.cpan.org/~zoffix/POE-Component-IRC-Plugin-HTML-ElementInfo-0.001/
lookup HTML element information from IRC
----
POE-Component-WWW-PastebinCa-Retrieve-0.004
http://search.cpan.org/~zoffix/POE-Component-WWW-PastebinCa-Retrieve-0.004/
non-blocking wrapper around WWW::Pastebin::PastebinCa::Retrieve
----
PowerDNS-Backend-MySQL-0.05
http://search.cpan.org/~augie/PowerDNS-Backend-MySQL-0.05/
Provides an interface to manipulate PowerDNS data in the MySQL Backend.
----
RPC-Serialized-0.0603
http://search.cpan.org/~oliver/RPC-Serialized-0.0603/
Subroutine calls over the network using common serialization
----
SIOC-v1.0.0
http://search.cpan.org/~geewiz/SIOC-v1.0.0/
The SIOC Core Ontology
----
SQL-DB-0.11
http://search.cpan.org/~mlawren/SQL-DB-0.11/
Perl interface to SQL Databases
----
Socialtext-Resting-0.24
http://search.cpan.org/~lukec/Socialtext-Resting-0.24/
module for accessing Socialtext REST APIs
----
Socialtext-Resting-0.25
http://search.cpan.org/~lukec/Socialtext-Resting-0.25/
module for accessing Socialtext REST APIs
----
Socialtext-Wikrad-0.06
http://search.cpan.org/~lukec/Socialtext-Wikrad-0.06/
efficient wiki browsing and editing
----
Test-Server-0.04_01
http://search.cpan.org/~jkutej/Test-Server-0.04_01/
what about test driven administration?
----
Text-Similarity-0.04
http://search.cpan.org/~tpederse/Text-Similarity-0.04/
measuring the pair-wise similarity of documents.
----
Tk-DiffText-0.19
http://search.cpan.org/~mjcarman/Tk-DiffText-0.19/
Perl/Tk composite widget for colorized diffs.
----
WWW-Pastebin-Base-Retrieve-0.001
http://search.cpan.org/~zoffix/WWW-Pastebin-Base-Retrieve-0.001/
base class for modules which implement retrieving of pastes from pastebins
----
WWW-Pastebin-NoMorePastingCom-Retrieve-0.001
http://search.cpan.org/~zoffix/WWW-Pastebin-NoMorePastingCom-Retrieve-0.001/
retrieve pastes from http://nomorepasting.com/ website
----
WWW-Pastebin-PastebinCa-Retrieve-0.001
http://search.cpan.org/~zoffix/WWW-Pastebin-PastebinCa-Retrieve-0.001/
a module to retrieve pastes from http://pastebin.ca/ website
----
XML-API-0.19
http://search.cpan.org/~mlawren/XML-API-0.19/
Perl extension for writing XML
----
mc_units-20080321
http://search.cpan.org/~hmbrand/mc_units-20080321/
----
perfSONAR_PS-Services-MA-CircuitStatus-0.08
http://search.cpan.org/~perfsonar/perfSONAR_PS-Services-MA-CircuitStatus-0.08/
A module that provides methods for an E2EMon Compatible MP.
----
vshnu-1.0302
http://search.cpan.org/~kinzler/vshnu-1.0302/
If you're an author of one of these modules, please submit a detailed
announcement to comp.lang.perl.announce, and we'll pass it along.
This message was generated by a Perl program described in my Linux
Magazine column, which can be found on-line (along with more than
200 other freely available past column articles) at
http://www.stonehenge.com/merlyn/LinuxMag/col82.html
print "Just another Perl hacker," # the original
--
Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095
<merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/>
Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.
See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!
------------------------------
Date: Sat, 22 Mar 2008 02:11:02 +0100
From: Joost Diepenmaat <joost@zeekat.nl>
Subject: Re: Perl code to fill-in online form
Message-Id: <87d4pn8swp.fsf@zeekat.nl>
Ben Bullock <benkasminbullock@gmail.com> writes:
> It's possible but highly unlikely. I think you didn't read where the
> poster said that he keeps getting the source code for the login window
> when he tries to access the page he wants. The problem is lack of
> authentication. If he has the URL for the popup window, window 3, which
> he said that he does:
>
> $mech->get("web address from the 3rd step above");
>
> it doesn't matter how window 2 opens window 3. Being opened with
> JavaScript has nothing to do with it.
Although you state your case a bit confusingly, after re-reading the
original post I agree that my interpretation is probably wrong and yours
is probably correct.
>> You either have to figure out how to get at the popup's url via
>> WWW::Mechanize (probably using some hand-written rules), and/or you'll
>> need to "mechanize" a javascript capable browser. Since you're on
>> windows, you may want to try Win32::IE::Mechanize.
>
> No, no, no, this is really bad advice. You didn't read the poster's
> question properly.
I do wonder why this is bad advice. AFAIK it should "work" either way.
--
Joost Diepenmaat | blog: http://joost.zeekat.nl/ | work: http://zeekat.nl/
------------------------------
Date: Sat, 22 Mar 2008 04:40:58 +0000 (UTC)
From: Ben Bullock <benkasminbullock@gmail.com>
Subject: Re: Perl code to fill-in online form
Message-Id: <fs22kq$3vp$1@ml.accsnet.ne.jp>
On Sat, 22 Mar 2008 02:11:02 +0100, Joost Diepenmaat wrote:
> Ben Bullock <benkasminbullock@gmail.com> writes:
>>> You either have to figure out how to get at the popup's url via
>>> WWW::Mechanize (probably using some hand-written rules), and/or you'll
>>> need to "mechanize" a javascript capable browser. Since you're on
>>> windows, you may want to try Win32::IE::Mechanize.
>>
>> No, no, no, this is really bad advice. You didn't read the poster's
>> question properly.
>
> I do wonder why this is bad advice. AFAIK it should "work" either way.
I'm sorry to have written like that. I had this vision of the original
poster spending hours and hours trying to do something which probably
wouldn't have solved his problem.
------------------------------
Date: Sat, 22 Mar 2008 10:49:29 +0100
From: "Peter J. Holzer" <hjp-usenet2@hjp.at>
Subject: Re: strategys other than subroutine and OO?
Message-Id: <slrnfu9lh9.t39.hjp-usenet2@hrunkner.hjp.at>
On 2008-03-22 00:38, Ben Morrow <ben@morrow.me.uk> wrote:
> Quoth "szr" <szrRE@szromanMO.comVE>:
>> Just a sort of a semi-tangent question, isn't using next and last with
>> labels (to, say, break out of a parent loop from an inner loop in a set
>> of nested loops) implicitly using `goto` ?
>
> Of course. The principle difference, for me, is that next/last/redo
> always jump to the top (or right out) of a block, so blocks are always
> executed straight through up to the point where you jump out. Even
> though it's logically the same (and operationally very slightly slower),
> I would prefer
>
> begin_stuff();
>
> FOO: {
> do_stuff();
> redo FOO if condition();
> }
>
> end_stuff();
>
> to
>
> begin_stuff();
>
> FOO:
> do_stuff();
> goto FOO if condition();
>
> end_stuff();
In that particular case I'd prefer:
begin_stuff();
do {
do_stuff();
} while (condition());
end_stuff();
but I agree in general. While it's not "structured programming" in the
strict definition (there is more than one way out of a block) it is
"more structured" than spaghetti code. And personally i find
while (<>) {
some_code();
next unless $x;
more_code();
next unless $y;
even_more_code();
next unless $z;
if_all_goes_well();
}
more readable than
while (<>) {
some_code();
if ($x) {
more_code();
if ($y) {
even_more_code();
if ($z) {
if_all_goes_well();
}
}
}
}
------------------------------
Date: Sat, 22 Mar 2008 00:52:54 -0800
From: worlman385@yahoo.com
Subject: XML to Database
Message-Id: <orh9u3177ifossgeito10np0ud7qre71ro@4ax.com>
I am now using SQLXML to load XML file into a SQLServer database.
Here is how it works -
XML(Data) + XSD(Schema) -->
through MS SQLXML COM program (EXE) -->
SQLServer2005
==================
I though XML Schema is used for defining what kind of Element or
attribute should appear in an XML document right?
But from above example, XSD schema can also used to describe how XML
document should be map to a Database table too???
Then XSD can be think of a document that describe how One want to
manipulate a specific XMLfile?
So, XSD schema to be used to describe anything about data manipulate
of an XML???
Above is the only use of XSD schema?
------------------------------
Date: 6 Apr 2001 21:33:47 GMT (Last modified)
From: Perl-Users-Request@ruby.oce.orst.edu (Perl-Users-Digest Admin)
Subject: Digest Administrivia (Last modified: 6 Apr 01)
Message-Id: <null>
Administrivia:
#The Perl-Users Digest is a retransmission of the USENET newsgroup
#comp.lang.perl.misc. For subscription or unsubscription requests, send
#the single line:
#
# subscribe perl-users
#or:
# unsubscribe perl-users
#
#to almanac@ruby.oce.orst.edu.
NOTE: due to the current flood of worm email banging on ruby, the smtp
server on ruby has been shut off until further notice.
To submit articles to comp.lang.perl.announce, send your article to
clpa@perl.com.
#To request back copies (available for a week or so), send your request
#to almanac@ruby.oce.orst.edu with the command "send perl-users x.y",
#where x is the volume number and y is the issue number.
#For other requests pertaining to the digest, send mail to
#perl-users-request@ruby.oce.orst.edu. Do not waste your time or mine
#sending perl questions to the -request address, I don't have time to
#answer them even if I did know the answer.
------------------------------
End of Perl-Users Digest V11 Issue 1384
***************************************