[24698] in Perl-Users-Digest
Perl-Users Digest, Issue: 6855 Volume: 10
daemon@ATHENA.MIT.EDU (Perl-Users Digest)
Wed Aug 11 14:06:17 2004
Date: Wed, 11 Aug 2004 11:05:13 -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 Wed, 11 Aug 2004 Volume: 10 Number: 6855
Today's topics:
Re: Are you my mother? (was Re: Statistics...) <matthew.garrish@sympatico.ca>
Re: Can somebody explain? (J. Romano)
Re: Can somebody explain? (Anno Siegel)
favorite perl IDE (dragonbide)
Re: favorite perl IDE <jgibson@mail.arc.nasa.gov>
Re: File::Glob - can it recurse? (Randall Perry)
Re: File::Glob - can it recurse? (Randall Perry)
Re: File::Glob - can it recurse? (Randall Perry)
Re: File::Glob - can it recurse? (Randall Perry)
How to catch CTRL-C in Windows NT cmd.exe??? (Solo)
How to remove a bunch of .log in windows (Sarah)
Re: How to remove a bunch of .log in windows (Greg Bacon)
Re: How to remove a bunch of .log in windows <noreply@gunnar.cc>
Net::SMTP woes <admin@asarian-host.net>
Re: News::Scan question <mr@sandman.net>
Re: News::Scan question (Greg Bacon)
Re: Parsing form POST without CGI.pm on Win32 <Joe.Smith@inwap.com>
Re: Parsing form POST without CGI.pm on Win32 <Joe.Smith@inwap.com>
Digest Administrivia (Last modified: 6 Apr 01) (Perl-Users-Digest Admin)
----------------------------------------------------------------------
Date: Wed, 11 Aug 2004 10:00:38 -0400
From: "Matt Garrish" <matthew.garrish@sympatico.ca>
Subject: Re: Are you my mother? (was Re: Statistics...)
Message-Id: <4EpSc.14580$a65.668313@news20.bellglobal.com>
"Greg Bacon" <gbacon@hiwaay.net> wrote in message
news:10hk25f5mqrtp61@corp.supernews.com...
> In article <_CeSc.20342$Mq1.956850@news20.bellglobal.com>,
> Matt Garrish <matthew.garrish@sympatico.ca> wrote:
>
> : [...]
> :
> : If it's any help, Dr. Seuss wrote a book about a baby bird like you.
> : It's called "Are you my mother?". I highly recommend it!
>
> My son liked that book when he was younger! I can remember reading it
> to him, and knowing the story from having heard it many times, he'd
> jump ahead -- very funny to hear a two-year-old's attempt at a
> matter-of-fact tone -- to say, "No, I am a dog" or "No, I am a cow."
>
"Are you Greg Bacon?"
"No, I am the output of his script!"
I'll be laughing for a week... : )
Matt
------------------------------
Date: 11 Aug 2004 08:02:07 -0700
From: jl_post@hotmail.com (J. Romano)
Subject: Re: Can somebody explain?
Message-Id: <b893f5d4.0408110614.683494a8@posting.google.com>
vsnadagouda@yahoo.com (Vittal) wrote in message news:<f9dcc290.0408092327.b0120e6@posting.google.com>...
>
> In one of the file I found the following snippet:
>
> $temp = qr{
> \(
> (?:
> (?>[^()]+ )
> |
> (??{ $temp })
> )*
> \)
> }x;
>
> $cchat = qr/((\W)?(\*?\*?\w+)\s*($temp))/;
>
> Can somebody explain me what these two lines do?
Dear Vittal,
The good news is that the programmer who wrote that script did not
create the first line him/herself. He/She just copied it straight
from the "prelre" documentation. To read what it does, type "perldoc
perlre" at a DOS or Unix prompt and search for the word "postponed".
You'll see the exact same piece of code and the explanation that this
regular expression matches a parenthesized group.
In other words, if you can use $temp like this:
if ("I saw a color (blue)." =~ m/$temp/)
{
print $&; # this prints the match "(blue)"
}
It will also work with nested parentheses, like this:
if ("I already ate (I ate one (1) pizza)." =~ m/$temp/)
{
print $&; # this prints "(I ate one (1) pizza)"
}
The bad news is that the programmer who wrote that script didn't feel
the need to add comments to explain the purpose of those regular
expressions. It has been said that it's almost always easier to
create your own regular expressions than to understand one that's
already written, and in this case that's definitely true. If it
wasn't for the fact that the first line was specifically mentioned in
"perldoc perlre", I'm sure that I would not have been able to figure
out what it was looking for.
The second regular expression is a little easier to figure out.
Let's take it a bit at a time:
> $cchat = qr/((\W)?(\*?\*?\w+)\s*($temp))/;
The only parts of the $cchat regular expression that are not optional
are the \w+ part (which matches at least one "word" character (that
is, a letter, digit, or underscore)) and $temp, which matches a
parenthesized expression. Optionally, there may be whitespace (any
amount) between the non-optional parts. Also, there may be one or two
asterisks before the \w+ part. There could also be an optional
non-"word" character before the word characters (which would appear
before the asterisks, if the asterisks happen to exist).
Was my explanation confusing? If you didn't think so, then you're
a super genuis. I didn't expect it to be very easy to follow (like it
is said, it's not very easy to understand a regular expression that
you didn't write), so I always recommend writing a few comments (with
any non-simple regular expression) that shows a few sample matches.
The writer of that program you're reading should have included a few
comments like this:
# The $temp regular expression was taken right out of
# the "perldoc perlre" documentation. It matches a
# parenthesized expression (that may or may not contain
# nested parentheses):
$ temp = ... ;
# The purpose of the $cchat regular expression is ...
# It matches all of the following lines:
# some_text(parenthesized expression)
# some_text (parenthesized expression)
# *some_text(parenthesized expression)
# **some_text (parenthesized expression)
# %*some_text (parenthesized expression)
# ^**some_text(parenthesized expression)
# &some_text (parenthesized expression)
# !some_text(parenthesized expression)
$cchat = qr/((\W)?(\*?\*?\w+)\s*($temp))/;
Because the original programmer didn't explain the purpose of the
$cchat regular expression, it's difficult for us to figure it out for
sure. The closest we can come to figuring it out is to examine sample
matches and deduce the purpose from there.
If you ever add more code to this program, do yourself and the
future maintainers of the program a favor and add comments to document
your regular expressions. Include the purpose of the regular
expression (in plain English or whatever language is the main language
spoken at work) and include a few sample matches (because sometimes
looking at sample matches helps a person understand much better than
looking at the regular expression itself). It also helps the
debugging process a lot.
When you write code, please put comments in your code that explains
to anyone who didn't write the code what the code is doing and its
purpose. A lot of coders avoid doing this, giving many excuses as to
why they shouldn't. Some of the excuses are:
* I don't need to include comments because I write
non-esoteric (simple) code that anyone can understand.
* Comments eventually become outdated (and outdated comments
are wrong) and wrong comments are worse than no comments
at all (because they are misleading).
* I don't need to include comments because I write
"self-documenting" code. Comments are a sign that the
code is impossible to understand without outside help,
and I don't write code like that.
Don't fall into those traps! I may be offending some die-hard
programmers here who adhere to one or more of the above traps I
listed, but I sincerely believe that comments and documentation are
vital to writing programs (especially when writing programs that will
be read by other people) -- even if the comments and documentation
become outdated (outdated comments and documentation may not be
correct in everything they say, but at least they provide important
hints to anyone trying to understand, debug, and maintain the code).
I hope this helps, Vittal.
-- Jean-Luc Romano
------------------------------
Date: 11 Aug 2004 17:27:46 GMT
From: anno4000@lublin.zrz.tu-berlin.de (Anno Siegel)
Subject: Re: Can somebody explain?
Message-Id: <cfdkui$co$1@mamenchi.zrz.TU-Berlin.DE>
J. Romano <jl_post@hotmail.com> wrote in comp.lang.perl.misc:
> vsnadagouda@yahoo.com (Vittal) wrote in message
> news:<f9dcc290.0408092327.b0120e6@posting.google.com>...
[...]
> When you write code, please put comments in your code that explains
> to anyone who didn't write the code what the code is doing and its
> purpose. A lot of coders avoid doing this, giving many excuses as to
> why they shouldn't. Some of the excuses are:
>
> * I don't need to include comments because I write
> non-esoteric (simple) code that anyone can understand.
>
> * Comments eventually become outdated (and outdated comments
> are wrong) and wrong comments are worse than no comments
> at all (because they are misleading).
>
> * I don't need to include comments because I write
> "self-documenting" code. Comments are a sign that the
> code is impossible to understand without outside help,
> and I don't write code like that.
>
> Don't fall into those traps! I may be offending some die-hard
> programmers
I am one of the die-hard programmers who has occasionally offered points
of view that resemble those you misrepresent as "excuses" and "traps".
> here who adhere to one or more of the above traps I
> listed, but I sincerely believe that comments and documentation are
> vital to writing programs (especially when writing programs that will
> be read by other people) -- even if the comments and documentation
> become outdated (outdated comments and documentation may not be
> correct in everything they say, but at least they provide important
> hints to anyone trying to understand, debug, and maintain the code).
What is offensive is not your opposition but your misrepresentation.
Let me first set the scope. We are talking about *comments*, (not
documentation in general, as you chose to drag in), and, specifically,
I'm talking about micro-commenting single statements of code. So-called
block comments (as might precede a sub definition or a group of such)
are another issue altogether. Further, we are talking about comments
in Perl, or a similarly high-level language.
Within that scope, I maintain that comments should be the rare exception,
not the rule.
What you present as a stance of hubris ("I don't write code like that")
is really an exhortation not to write code that needs comments. That may
not be possible in assembler, but in Perl and similar languages it is.
Perl has complex data structures that can be treated as units and all
house-keeping (length of strings, number of elements in an array, keys
of a hash, etc.) is taken care of.
That allows a programmer to work in units that are meaningful in terms
of the overall process and not fiddle with stuff below that level. Usually,
what you do on the process level is obvious. If you feel the need to
explain some code, that is usually a sign that you haven't found the
right data structure and/or algorithm yet. So don't paste it over
with an explanatory comment, rewrite it so that it doesn't need one.
Anno
------------------------------
Date: 11 Aug 2004 08:12:36 -0700
From: allen.jordan@colorado.edu (dragonbide)
Subject: favorite perl IDE
Message-Id: <d5ef4ee9.0408110712.2517dd10@posting.google.com>
Hi. I'm looking for a good perl IDE. What are some of your
favorites? (preferably for windows, but list whatever ones you'd
like) .
------------------------------
Date: Wed, 11 Aug 2004 08:22:20 -0700
From: Jim Gibson <jgibson@mail.arc.nasa.gov>
Subject: Re: favorite perl IDE
Message-Id: <110820040822202275%jgibson@mail.arc.nasa.gov>
In article <d5ef4ee9.0408110712.2517dd10@posting.google.com>,
dragonbide <allen.jordan@colorado.edu> wrote:
> Hi. I'm looking for a good perl IDE. What are some of your
> favorites? (preferably for windows, but list whatever ones you'd
> like) .
perldoc -q IDE
------------------------------
Date: 11 Aug 2004 06:18:36 -0700
From: rgp@systame.com (Randall Perry)
Subject: Re: File::Glob - can it recurse?
Message-Id: <fac8f6c0.0408110518.3330c55e@posting.google.com>
Uri Guttman <uri@stemsystems.com> wrote in message news:<x7hdre6ht9.fsf@mail.sysarch.com>...
> chmod the system call
> doesn't recurse but chmod the utility can. they are different things
> even if they have the same name and have overlapping functionality.
Didn't know that.
Thanks everyone for the info.
------------------------------
Date: 11 Aug 2004 06:22:51 -0700
From: rgp@systame.com (Randall Perry)
Subject: Re: File::Glob - can it recurse?
Message-Id: <fac8f6c0.0408110522.59295125@posting.google.com>
Uri Guttman <uri@stemsystems.com> wrote in message news:<x7hdre6ht9.fsf@mail.sysarch.com>...
> chmod the system call
> doesn't recurse but chmod the utility can. they are different things
> even if they have the same name and have overlapping functionality.
Didn't know that.
Thanks everyone for the info.
------------------------------
Date: 11 Aug 2004 06:23:23 -0700
From: rgp@systame.com (Randall Perry)
Subject: Re: File::Glob - can it recurse?
Message-Id: <fac8f6c0.0408110523.6e751df9@posting.google.com>
Uri Guttman <uri@stemsystems.com> wrote in message news:<x7hdre6ht9.fsf@mail.sysarch.com>...
> chmod the system call
> doesn't recurse but chmod the utility can. they are different things
> even if they have the same name and have overlapping functionality.
Didn't know that.
Thanks everyone for the info.
------------------------------
Date: 11 Aug 2004 07:01:30 -0700
From: rgp@systame.com (Randall Perry)
Subject: Re: File::Glob - can it recurse?
Message-Id: <fac8f6c0.0408110519.633d698c@posting.google.com>
Uri Guttman <uri@stemsystems.com> wrote in message news:<x7hdre6ht9.fsf@mail.sysarch.com>...
> chmod the system call
> doesn't recurse but chmod the utility can. they are different things
> even if they have the same name and have overlapping functionality.
Didn't know that.
Thanks everyone for the info.
------------------------------
Date: 11 Aug 2004 10:50:04 -0700
From: solo11051970@yahoo.ca (Solo)
Subject: How to catch CTRL-C in Windows NT cmd.exe???
Message-Id: <66999c27.0408110950.65ae17d6@posting.google.com>
I wrote the following code just to test the catch of Ctrl-C:
---------------
{
$SIG{'INT'} = \&cmd1;
print "Entering the loop \n\n";
while (1)
{
}
}
sub cmd1
{
my ($sig) = @_;
print "The Interrupt was caught: <$sig>\n";
exit (0);
}
--------------------
It works perfectly on UNIX, But in the windows NT cmd.exe or 4NT prompt, it
just kills the process and does not display the print message...
HELP!!!
------------------------------
Date: 11 Aug 2004 08:51:35 -0700
From: sarahweb228@hotmail.com (Sarah)
Subject: How to remove a bunch of .log in windows
Message-Id: <219a0e46.0408110751.5f46e175@posting.google.com>
Hello,
I want to remove all the log files in c:\program files\log, so I tried
unlink <c:\\program files\\log\\*.log>;
but it didn't work at all. Then I tried to get all the log file names by
@mylogfiles = glob (c:\\program files\\log\\*.log);
but I didn't get the right log file names.
Could any one help me?
Thanks a lot,
Sarah
------------------------------
Date: Wed, 11 Aug 2004 16:32:38 -0000
From: gbacon@hiwaay.net (Greg Bacon)
Subject: Re: How to remove a bunch of .log in windows
Message-Id: <10hkih68en2jh36@corp.supernews.com>
In article <219a0e46.0408110751.5f46e175@posting.google.com>,
Sarah <sarahweb228@hotmail.com> wrote:
: I want to remove all the log files in c:\program files\log, so I tried
:
: unlink <c:\\program files\\log\\*.log>;
:
: but it didn't work at all. Then I tried to get all the log file names by
:
: @mylogfiles = glob (c:\\program files\\log\\*.log);
:
: but I didn't get the right log file names.
Spaces in paths will get you. Modify the code below to taste:
#! perl
use warnings;
use strict;
# i.e., glob "C:\\Program Files\\log\\*.log"
my $path = 'C:\Program Files\log';
opendir my $dir, $path or die "$0: opendir $path: $!\n";
my @files = map "$path\\$_",
grep /\.log$/i,
readdir $dir;
print $_, "\n" for @files;
Hope this helps,
Greg
--
My son, I give thee now a valuable parcel of land; I assure you I have found
a considerable quantity of gold by digging there. Thee mayest do the same:
but thee must carefully observe this, never dig more than a plough deep.
-- Ben Franklin
------------------------------
Date: Wed, 11 Aug 2004 18:57:22 +0200
From: Gunnar Hjalmarsson <noreply@gunnar.cc>
Subject: Re: How to remove a bunch of .log in windows
Message-Id: <2nv1i6F4u2gpU1@uni-berlin.de>
Sarah wrote:
> I want to remove all the log files in c:\program files\log, so I
> tried
>
> unlink <c:\\program files\\log\\*.log>;
>
> but it didn't work at all.
Space in directory name...
Try:
chdir 'c:\program files\log';
unlink <*.log>;
> Then I tried to get all the log file names by
>
> @mylogfiles = glob (c:\\program files\\log\\*.log);
>
> but I didn't get the right log file names.
my $dir = 'c:\program files\log';
chdir $dir;
my @mylogfiles = map "$dir\\$_", glob '*.log';
--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl
------------------------------
Date: Wed, 11 Aug 2004 19:19:22 +0200
From: "Mark" <admin@asarian-host.net>
Subject: Net::SMTP woes
Message-Id: <a4ydnceUa7G4yIfcRVn-iQ@giganews.com>
Hello,
Using perl 5.8.4 (FreeBSD 4.10), I try to deliver a message to a local SMTP
server, as follows:
if (not ($smtp = Net::SMTP -> new (
Timeout => 10,
PeerAddr => 'localhost',
PeerPort => 5005,
Debug => 1,
))) {
print $@;
exit 1;
}
I successfully sent the message; except, that Net::SMTP does not connect to
port 5005 on localhost at all! Instead, it just connects to port 25 of the
MX of the current host address.
What am I missing?
I appreciate any suggestion,
- Mark
------------------------------
Date: Wed, 11 Aug 2004 16:47:56 +0200
From: Sandman <mr@sandman.net>
Subject: Re: News::Scan question
Message-Id: <mr-E21F87.16475611082004@individual.net>
In article <10hk18nsjdbn227@corp.supernews.com>,
gbacon@hiwaay.net (Greg Bacon) wrote:
> : In article <i38Sc.19983$Jp6.17178@newsread3.news.atl.earthlink.net>,
> : "Bill Segraves" <segraves_f13@mindspring.com> wrote:
> :
> : > Surely, you're aware of Google. OTOH, if you were, you would have
> : > found examples of how the author uses New::Scan, e.g.,
> : >
> : > http://search.cpan.org/src/GBACON/News-Scan-0.53/eg/
> :
> : Yes, I've read through all of therse example scripts, but they seem to
> : all be based on batch-processing a feed file from a usenet server, not
> : something I can call upon at will on any given set of data.
> :
> : Or am I missing something?
>
> When I generate traffic reports, I call the nntpget program and then
> scan the spool I've created, so in that sense, it's code I "can call
> upon at will on any given set of data."
>
> Well, the any given set of data part makes me squint, but we seem to
> be talking about the same thing.
>
> Let's take a step back: what are you trying to do? If I understand
> your intent better, maybe I can offer useful suggestions.
Well, I have used 'suck' to retrieve posts from a newsgroup, and I am now
reading through that file with a perlscript. The purpose of this perl script is
to insert all posts in the file into a MySQL database. The basic function of
the script looks like below. Note that a single "." on a line means that it's a
new article, and as long as I'm not seing that, I aggregate the body and
headers into variable to be parsed once I reach the ".".
#!/usr/bin/perl
use POSIX;
use strict;
use warnings;
my($thepost, $all, $theheader,$scan);
my $ihead = 1;
my $nr = 0;
open FILE, "<news.txt";
while (<FILE>){
if (/^\.$/){
# Ok, we've completed one article, let's
# process what we've got - but how?
# I'd like to make a News::Scan::Article
# object of it and call it with $art->subject
# and vice versa and use that to insert values
# into the database.
# Now lets reset what we have aggregated.
($thepost, $theheader, $all) = "";
$ihead = 1;
next;
}
$ihead = 0 if /^$/;
if ($ihead == 1){
$theheader .= $_; # We're in the header part of the message
} else {
$thepost.=$_; # We're in the body
}
# Lets save the entire post as well.
$all.=$_;
}
--
Sandman[.net]
------------------------------
Date: Wed, 11 Aug 2004 16:05:43 -0000
From: gbacon@hiwaay.net (Greg Bacon)
Subject: Re: News::Scan question
Message-Id: <10hkgun289n1f7d@corp.supernews.com>
In article <mr-E21F87.16475611082004@individual.net>,
Sandman <mr@sandman.net> wrote:
: In article <10hk18nsjdbn227@corp.supernews.com>,
: gbacon@hiwaay.net (Greg Bacon) wrote:
:
: > Let's take a step back: what are you trying to do? If I understand
: > your intent better, maybe I can offer useful suggestions.
:
: Well, I have used 'suck' to retrieve posts from a newsgroup, and I am
: now reading through that file with a perlscript. The purpose of this
: perl script is to insert all posts in the file into a MySQL database.
How are you storing the articles in your database? If you're only
inserting articles into a text or clob column, I don't see why you'd
need any special module for processing articles.
Your code mentions $art->subject, so are you looking to extract
header fields? In that case, stick with Mail::Internet:
#! /usr/local/bin/perl
use warnings;
use strict;
use Mail::Internet;
$/ = "\n.\n";
while (<>) {
s/\n\.\n\z/\n/; # strip dot-only line
my $msg = Mail::Internet->new([ split /(?<=\n)/ ]);
unless ($msg) {
warn "$0: $ARGV: chunk $.: bad message\n";
next;
}
my $subj = $msg->head->get("Subject");
$subj = "<undef>" unless defined $subj; # wish we had err
$subj =~ s/\n+$//;
print "subject = [$subj]\n";
}
: [...]
Do you have something else in mind?
Greg
--
When government forces people to help their neighbors, conscience
atrophies. When people are free to choose whether to help their
neighbors or not, conscience is strengthened.
-- Jacob G. Hornberger
------------------------------
Date: Wed, 11 Aug 2004 17:44:57 GMT
From: Joe Smith <Joe.Smith@inwap.com>
Subject: Re: Parsing form POST without CGI.pm on Win32
Message-Id: <tWsSc.288928$XM6.274109@attbi_s53>
Aaron DeLoach wrote:
>>Uh? Says who? Did you *try* any Perl scripts using STDIN? It works
>>just fine...? (And not just in Perl; of course there is a "standard
>>input.")
>
> Did I try!! I have been trying for a few days :-)
>
>>perl -e "print while (<STDIN>)"
>>Dude, this works fine!
>>Dude, this works fine!
>>^Z
>
> This does not work for me (Win XP Home/Perl 5.8.4)
You may have a typographical error, or an improperly installed perl.
It works for me on Win XP Home.
C:\Documents and Settings\jms>perl -e "print while (<STDIN>)"
This is the first line
This is the first line
Here comes the second
Here comes the second
^Z
C:\Documents and Settings\jms>perl -v
This is perl, v5.8.4 built for MSWin32-x86-multi-thread
-Joe
------------------------------
Date: Wed, 11 Aug 2004 17:59:36 GMT
From: Joe Smith <Joe.Smith@inwap.com>
Subject: Re: Parsing form POST without CGI.pm on Win32
Message-Id: <c8tSc.240560$%_6.78192@attbi_s01>
Aaron DeLoach wrote:
> Is anyone getting to STDIN using Win XP *Home Version* ?
Yes, it works just fine with Windows XP Home Version Version 2002
Service Pack 1 (build 2600).
Start -> Run -> cmd
C:\Documents and Settings\jms>perl -e "print while (<STDIN>)"
This is the first line
This is the first line
Here comes the second
Here comes the second
^Z
C:\Documents and Settings\jms>perl -v
This is perl, v5.8.4 built for MSWin32-x86-multi-thread
-Joe
------------------------------
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 V10 Issue 6855
***************************************