Christian Bliß: Teile des Codes auslagern

Hallo,

Hier die Codes:

1.
-------------------------------
if ($variable1 eq $variable2) {
  print "OK";
}
-------------------------------

2.
-----------------------------------------
$if_abfrage = '$variable1 eq $variable2';

if ($if_abfrage) {
  print "OK";
}
-----------------------------------------

Warum machen beide Scripte nicht das gleiche?
Wie kann ich den Code der IF-Abfrage auslagern (siehe Script 2) - den müsste ich nämlich dynamisch generieren?

MfG Christian Bliß

  1. Hallo Christian!

    if ($variable1 eq $variable2)

    $if_abfrage = '$variable1 eq $variable2';
    if ($if_abfrage)

    Warum machen beide Scripte nicht das gleiche?

    Erstmal, ich kann kein Perl, aber trotzdem würde ich sagen, daß es logisch ist, daß es nicht funktioniert.
    Was wird denn bei $if_abfrage gemacht, wenn d ues einfach so ausführst?

    Für mich sieht das nämlich so aus, als ob du der Variablen if_abfrage den Wert '$variable eq Variable' als "String" zuweist (Lesetip: http://selfhtml.teamone.de/cgiperl/sprache/zeichenketten.htm#regeln).
    Und im String wird natürlich kein eq ausgweretet, weil es wie ein eq in jedem anderen Text behandelt wird.

    Ohne die single Quotes sollte es meiner ansicht nach funktionieren.

    MfG
    Götz

    --
    Losung und Lehrtext für Samstag, 17. Januar 2004
    Samuel sprach: Ihr habt zwar all das Unrecht getan; es sei aber ferne von mir, dass ich davon abließe, für euch zu beten. (1.Samuel 12,20.23)
    Ordnet euch allen unter, die mitarbeiten und sich mühen! Sie haben meinen und euren Geist erquickt. Erkennt solche Leute an! (1.Korinther 16,16.18)
    (http://www.losungen.de/heute.php3)
    1. Hallo Götz,

      if ($variable1 eq $variable2)

      $if_abfrage = '$variable1 eq $variable2';
      if ($if_abfrage)

      Warum machen beide Scripte nicht das gleiche?

      Weil bei dem einen zwei Variablen auf Gleichheit geprüft werden und
      bei bem anderen eine Variable auf != 0 geprüft wird.

      Erstmal, ich kann kein Perl, aber trotzdem würde ich sagen, daß es
      logisch ist, daß es nicht funktioniert.

      Ja ;)

      Für mich sieht das nämlich so aus, als ob du der Variablen
      if_abfrage den Wert '$variable eq Variable' als "String" zuweist

      Ja.

      Ohne die single Quotes sollte es meiner ansicht nach funktionieren.

      Nein. Es ist trotzdem noch ein String. Diesmal nur mit den Werten der
      beiden Variablen.

      Grüße,
       CK

      --
      Willst du die Freuden dieser Welt geniessen, so musst du auch ihr Leid erdulden.
      1. Ohne die single Quotes sollte es meiner ansicht nach funktionieren.

        Nein. Es ist trotzdem noch ein String. Diesmal nur mit den Werten der beiden Variablen.

        Also was kann ich machen? Ich möchte die if-Abfrage außerhalb der Klammer generieren!

        1. Hallo Christian,

          Nein. Es ist trotzdem noch ein String. Diesmal nur mit den Werten
          der beiden Variablen.

          Also was kann ich machen? Ich möchte die if-Abfrage außerhalb der
          Klammer generieren!

          Warum? Nenn mal ein bisschen mehr Informationen.

          Grüße,
           CK

          --
          Wenn auf Erden alle das Schoene als schoen erkennen, so ist dadurch schon das Haessliche bestimmt.
          1. Hallo Christian,

            Nein. Es ist trotzdem noch ein String. Diesmal nur mit den Werten
            der beiden Variablen.

            Also was kann ich machen? Ich möchte die if-Abfrage außerhalb der
            Klammer generieren!

            Warum? Nenn mal ein bisschen mehr Informationen.

            Weil der Ausdruck dynamisch generiert wird, je nach Eingabe.

            Es werden Suchbgriffe eingetragen und "verunded".
            Bsp:

            Eingabe:
            "der die das"

            if-Ausdruck:
            ($name =~ m/der/i) and ($name =~ m/die/i) and ($name =~ m/das/i)

            Dieser if-Ausdruck muss nun in die Abfrage.

            MfG Christian Bliß

            1. Hallo Christian Bliß,

              Weil der Ausdruck dynamisch generiert wird, je nach Eingabe.

              Es werden Suchbgriffe eingetragen und "verunded".
              Bsp:

              Eingabe:
              "der die das"

              if-Ausdruck:
              ($name =~ m/der/i) and ($name =~ m/die/i) and ($name =~ m/das/i)

              sub check {
                my $str   = shift;
                my @terms = @_;

              foreach my $term (@terms) {
                  return if index($str,$term) == -1;
                }

              return 1;
              }

              Die Funktion oben nimmt einen String und einen Array von Such-Termen
              entgegen und prüft für jeden Ausdruck, ob er enthalten ist. Ist einer
              nicht enthalten, wird undef zurück gegeben, ansonsten 1.

              Grüße,
               CK

              --
              Die Stärke des Geistes ist unendlich, die Muskelkraft dagegen ist begrenzt.
      2. Hi,

        $if_abfrage = '$variable1 eq $variable2';

        Ohne die single Quotes sollte es meiner ansicht nach funktionieren.

        Nein. Es ist trotzdem noch ein String. Diesmal nur mit den Werten der
        beiden Variablen.

        $if_abfrage = $variable1 eq $variable2;

        soll ein String sein?

        cu,
        Andreas

        --
        MudGuard? Siehe http://www.mud-guard.de/
        1. Hallo MudGuard,

          $if_abfrage = $variable1 eq $variable2;

          soll ein String sein?

          Nein. Ich hatte Götz falsch verstanden, ich dachte, er will
          Doublequotes statt Singlequotes.

          Grüße,
           CK

          --
          "Ich muss auflegen, mein Essen ist gleich fertig."
          "Oh, was gibt 's denn?"
          "Hmm. Die Packung liegt schon im Muell, keine Ahnung.
          1. Hi,

            Nein. Ich hatte Götz falsch verstanden, ich dachte, er will
            Doublequotes statt Singlequotes.

            Hm. Wie kommt man von

            Ohne die single Quotes sollte es meiner ansicht nach funktionieren.

            auf

            "Nimm double quotes statt der single quotes"?

            Was trinkst Du? Krieg ich auch was von dem Zeug? ;-)

            cu,
            Andreas

            --
            MudGuard? Siehe http://www.mud-guard.de/
            1. Hallo MudGuard,

              Was trinkst Du?

              Gerolsteiner Stille Quelle, Medium.

              Krieg ich auch was von dem Zeug? ;-)

              Davon gehe ich aus ;)

              Grüße,
               CK

              --
              Kommt ein Vektor zur Drogenberatung: "Hilfe, ich bin linear abhaengig!"
              1. Hi,

                Was trinkst Du?
                Gerolsteiner Stille Quelle, Medium.

                Welcher Jahrgang? ;-)

                cu,
                Andreas

                --
                MudGuard? Siehe http://www.mud-guard.de/
  2. Hi,

    $if_abfrage = '$variable1 eq $variable2';

    In single quotes '' werden Variablen nicht durch ihren Wert ersetzt.
    Desweiteren weist Du hier der Variable den String zu, nicht jedoch das Ergebnis eines Vergleichs - innerhalb eines Strings werden Operatoren nicht interpretiert.

    Wenn Du das Ergebnis des Vergleichs der beiden Variablenwerte in $if_abfrage ablegen willst, laß einfach die Quotes weg.

    Warum machen beide Scripte nicht das gleiche?

    Warum sollten sie?

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.mud-guard.de/