[perl]if-else werkt niet

Pagina: 1
Acties:
  • 344 views

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Paultje3181
  • Registratie: November 2002
  • Laatst online: 02:12
Perl:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
    my $sender_is_valid = 0;
    my $statement = "select cid,vstatus from valid_mail where valid_mail = '$email_from'";
  my $sth = $DBH->prepare($statement);
  $sth->execute();

  while (my $ref = $sth->fetchrow_hashref()) 
    { $sender_is_valid = $ref->{'cid'}; }
    { $status_is_valid = $ref->{'vstatus'}; }

    if ($sender_is_valid and $status_is_valid="1")
        {
        toLog("Sender $email_from -> VALID. Process message");
}
elsif ($sender_is_valid and $status_is_valid="2")
{
toLog("Sender $email_from ->  NOT VALID. Inform sender");
}
else {toLog("Sender $email_from -> NOT VALID. Delete message");
}

Deze code probeer ik uit te voeren bij een mysql-query die allebei weergeeft. Alleen geeft ie in beide gevallen VALID als reactie. Ik kan maar niet achterhalen waar dit door komt. Volgens mij zou dit gewoon moeten werken namelijk. Anders quoten ook al geprobeerd zonder resultaat. Het probleem is dus dat $status_is_valid niet meegenomen wordt.

Iemand enig idee waarom niet?

Acties:
  • 0 Henk 'm!

  • BoringDay
  • Registratie: Maart 2009
  • Laatst online: 13-05 21:49
Ik ken perl niet maar als ik zo naar de scope van de while kijk.
Waar begint die en waar eindigt die? debuggen!

Acties:
  • 0 Henk 'm!

Verwijderd

Uhm ik weet het niet 100% zeker of dit in Perl ook zo is, maar de keyword 'and' is iets anders als '&&'

Dit kwam ook naar voren uit een ander topic zo uit mijn hoofd en ging volgens mij over PHP toen.

Acties:
  • 0 Henk 'm!

  • roughtodacore
  • Registratie: Februari 2012
  • Laatst online: 02-10 14:40
Ten eerste heb je op regel 14 een typo; moet elsif niet else if zijn? Ten tweede is jouw if clausule niet echt goed opgezet volgens mij. Je checkt of de variable $sender_is_valid true is, maar daarnaast zal je hem ook de waarde 1 meegeven. Dit omdat een enkele = de assign parameter is, en geen vergelijking (==, of === (type-comparison)).

Inderdaad zoals BoringDay aangeeft, debuggen! Printf's plaatsen in jouw code om te zien of variabelen de door jouw ingeschatte waarden ook daadwerkelijk hebben.

Alles kan, zolang het maar mogelijk is...


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

= en == zijn niet hetzelfde. Je while heeft een body van één regel omdat je met braces je scope daartoe beperkt. Je code is niet fatsoenlijk ingesprongen, dus hij valt onmogelijk goed te debuggen.

Kom op, we hebben jou járen geleden al gewezen op Programming FAQ - Debuggen: hoe doe ik dat? Elke keer dat je je in dit forum waagt sla je die hele stap van zelfredzaamheid over en voor iemand die blijkbaar al zo lang met programmeren bezig is moet dat toch écht gewoon vaste prik zijn.
roughtodacore schreef op vrijdag 08 mei 2015 @ 20:47:
Ten eerste heb je op regel 14 een typo; moet elsif niet else if zijn?
http://perlmeme.org/howtos/syntax/ifelsifelse.html

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Dit topic is gesloten.