Cruz: use strict und booleans

Hallo,

In Java gibt es ja die wunderbare Möglichkeit...

TestMe()
{
 if (rot) return false;
 if (grün) return true;
}

if (TestMe())
{
 print "yay es ist grün";
}

if (!TestMe())
{
 pritn "misst es ist rot";
}

Aber in Perl scheint sowas nicht zu gehen. Man muss wohl sowas wie...

if (TestMe() eq TRUE)...

schreiben. Zudem verbietet noch use strict die Verwendung von TRUE und FALSE als barewords, also wird das ganze nur noch zu nem blöden Stringvergleich mit "TRUE". Was ist denn der beste/eleganteste Möglichkeit in Perl Booleans einzusetzen und irgendwas auf TRUE oder FALSE zu checken? (natürlich unter Verwendung von strict)

Gruß und Dank
Cruz

  1. Hallo Cruz,

    Aber in Perl scheint sowas nicht zu gehen. Man muss wohl
    sowas wie...

    if (TestMe() eq TRUE)...

    schreiben.

    Selbstverstaendlich nicht. Alles, was nicht 0 ist, ist ein true
    value.

    Zudem verbietet noch use strict die Verwendung von TRUE und FALSE
    als barewords, also wird das ganze nur noch zu nem blöden
    Stringvergleich mit "TRUE".

    Wenn du nicht strict verwendest und testMe() eq TRUE tippst, ist es
    trotzdem ein String-Vergleich.

    Was ist denn der beste/eleganteste Möglichkeit in Perl Booleans
    einzusetzen und irgendwas auf TRUE oder FALSE zu checken?
    (natürlich unter Verwendung von strict)

    0 oder 1 zurueck geben.

    sub test_me {
      my $blahr = shift;
      return $blahr ? 1 : 0;
    }

    Alternativ: Konstanten definieren.

    use constant TRUE => 1;
    use constant FALSE => 0;

    Grüße,
     CK

    --
    Der Geist ist alles. Du wirst, was du denkst.
    http://wwwtech.de/
    1. Danke an euch beide für die Antworten!

      Die constants zu deklarieren finde ich am sympatischsten, denn es geht ja schließlich darum beim Lesen des Codes von weitem zu erkennen, dass es sich dabei um ein boolean check handelt.

      Grüße,
      Cruz

      1. use Mosche;

        Die constants zu deklarieren finde ich am sympatischsten, denn es geht ja schließlich darum beim Lesen des Codes von weitem zu erkennen, dass es sich dabei um ein boolean check handelt.

        Jeder Perl-Programmierer wird es dir danken, wenn du die Methode mit 0/1 verwendest. Das ist perl-nativ und extra so eingerichtet, dass es eben wie eine Boolean-Variable in anderen Sprachen verwendet werden kann. Dadurch wird dein Programm am Ende lesbarer, auch wenn dies momentan ein wenig "komisch" aussieht.

        Wenn du eine zeitlang Perl benutzen wirst, dann ist es sicherlich einfacher, ein paar Grundkonzepte dieser Sprache, die sich nunmal von Java unterscheidet, zu übernehmen.

        use Tschoe qw(Matti);

        --
          Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
  2. In Java gibt es ja die wunderbare Möglichkeit...

    Die gibt es in Perl auch, nur das es dort keinen boolsch'en Datentyp gibt.

    TestMe()
    {
    if (rot) return false;
    if (grün) return true;
    }

    das müßte dann lauten:
    sub TestMe()
    {
    if (rot) return 0;
    if (grün) return 1;
    }

    Die null kannst du auch weglassen,da

    if( 0 )
    if( undef )
    if( '' )

    zum gleichen Ergebniss führt.

    pritn "misst es ist rot";

    Nicht schlecht, 2 Fehler in 5 Wörtern, ich kann es selten besser ;-)

    Struppi.