Anadi Taylor wrote:
> Hi all,
> I have to start by thanking you all for your help so far - its been
> invaluable. If it were'nt for you guys and gals i would have pulled
> my hair out by now !!!!!
> 
> OK - here is the thing: I have written some code and it works fine
> (yahoooo), but i was wondering if there is a more 'PERL' way of doing
> things as this code looks bulky to me !!!!
> 
> the code id:
> 
> ## check to see if username or email already exist
> 
>       $errmesseml     = "False";
>       $errmessuser    = "False";
>       $emailuserfound = "False";
> 
>       if($dbemail eq $email)
>       {
>               $errmesseml = "True";
>       }

Most programmers would prefer to see you use Perl's concept of true and
false. Basically, anything that evaulates to an empty string "", or a single
zero "0" is false, and everything else is true.

So, you could write:

   my ($errmesseml, $errmessuser, $emailuserfound);     # all get set to
undef (false)
   $errmesseml = $dbemail eq $email;

> 
>       if($dbusername eq $membusrname)
>       {
>               $errmessuser = "True";
>       }

   $errmessuser = $dbusername eq $membusrname;

> 
> ## create readable error message
> 
>       $errmessage = "";

   my $errmessage;

> 
>       if (($errmesseml eq "True") and ($errmessuser eq "True"))       {
>               $errmessage = "Both the email address and the
> username have already been
> used";
>               $emailuserfound = "True";
> 
>       }
> 
>       if (($errmesseml eq "True") and ($errmessuser ne "True"))       {
>               $errmessage = "The email address has already been used";
>       $emailuserfound = "True"; }
> 
>       if (($errmesseml ne "True") and ($errmessuser eq "True"))       {
>               $errmessage = "The username has already been used";
>       $emailuserfound = "True"; }

It looks like you want $emailuserfound to be true if one or both of
$errmesseml or $errmessuser is true. So that is simply:

   $emailuserfound = $errmesseml || $errmessuser;

Then you're setting an error message based on one of three mutually
exclusive tests. You can write this as:

   if ($errmesseml && $errmessuser) { 
      $errmessage = "Both the email address and the username have already
been used;
   } elsif ($errmesseml) {
      $errmessage = "The email address has already been used";
   } elsif ($errmessuser) {
      $errmessage = "The username has already been used";
   }

But looking at the overall logic, I think you can simplify further and get
rid of the intermediate variables. $emailuserfound seems to be redundant.
It's true if there's something in $errmessage and false if not. So why not
just use $errmessage. Also, I think you could get rid of the $errmesseml and
$errmessuser flags, unless you need those somewhere else in the code.

How about this:

   my $errmessage;
   if ($dbemail eq $email && $dbusername eq $membusrname) {
      $errmessage = "Both the email address and the username have already
been used";
   } elsif ($dbemail eq $email) {
      $errmessage = "The email address has already been used";
   } elseif ($dbusername eq $membusrname) {
      $errmessage = "The username has already been used";
   }

> 
> 
> 
> I have tried to use lines like:
> 
> if ($errmesseml and !($errmessuser)) { do something }

   Because Perl is treating your strings "True" and "False" as both true.

> 
> but it doesnt work !!!! A bit of a bummer really - any ideas ?????

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to