Helbricht: Abfrage des Rückgabewertes einer Funktion

Hi,
ich möchte den Returnwert einer Funktion abfragen.
Die Funktion liest eine Datei und liefert den Dateiinhalt (return $inhalt),
wenn die Datei vorhanden ist und der Inhalt nicht leer ist.
Im anderen Fall wird je nach Zustand -2, -1, 0 zurückgeliefert.
Der Dateiinhalt, falls vorhanden besteht immer aus einem Text.
Wenn mich nur der Fall des vorhandenen Inhalts interessiert, wie kann ich dann am besten abfragen?
Ist ein Text > 0, d.h. ist die Abfrage "if (myfunc) {#Text vorhanden}" korrekt?
Mfg Helbricht

  1. Die Funktion liest eine Datei und liefert den Dateiinhalt (return $inhalt),
    wenn die Datei vorhanden ist und der Inhalt nicht leer ist.

    Das wäre OK, aber das ...

    Im anderen Fall wird je nach Zustand -2, -1, 0 zurückgeliefert.

    ist natürlich Murks. Zumindest absolut ungewöhnlich, dass eine Funktion entweder eine Zahl oder einen String zurückgibt.

    die einfachste Variante wäre wenn deine Funktion ein array mit einem Status zurückgibt:

    sub deineFunktion {  
    #...  
    return wantarray ? ($inhalt, $status) : $inhalt;  
    }  
      
    my($inhalt, $status) = deineFunktion();  
    
    

    Ist ein Text > 0, d.h. ist die Abfrage "if (myfunc) {#Text vorhanden}" korrekt?

    Es würde zwar funktionieren, ruft aber eine Warnungen hervor (wenn du mit use warnings arbeitest, was du solltest).

    Struppi.

    1. ist natürlich Murks. Zumindest absolut ungewöhnlich, dass eine Funktion entweder eine Zahl oder einen String zurückgibt.

      die einfachste Variante wäre wenn deine Funktion ein array mit einem Status zurückgibt:

      Auf die Funktion habe ich leider keinen Einfluss. Diese ist mir vorgegeben.

      1. ist natürlich Murks. Zumindest absolut ungewöhnlich, dass eine Funktion entweder eine Zahl oder einen String zurückgibt.

        die einfachste Variante wäre wenn deine Funktion ein array mit einem Status zurückgibt:

        Auf die Funktion habe ich leider keinen Einfluss. Diese ist mir vorgegeben.

        Ohje.

        Dann wird es schwierig, wenn du sauber programieren möchtest. Aber wenn du sowieso schon solche Funktionen benutzt, kannst du natürlich auch die von dir vorgeschlagene Variante verwenden. Du musst dann aber Warnungen ausschalten.

        Struppi.

        1. Hallo,

          Dann wird es schwierig, wenn du sauber programieren möchtest. Aber wenn du sowieso schon solche Funktionen benutzt, kannst du natürlich auch die von dir vorgeschlagene Variante verwenden. Du musst dann aber Warnungen ausschalten.

          Gibt es eine Abfrage der Art "if ($rc not numeric)" und würde diese dann keine Warnung liefern?
          Mfg
          Helbricht

          1. Hallo,

            Dann wird es schwierig, wenn du sauber programieren möchtest. Aber wenn du sowieso schon solche Funktionen benutzt, kannst du natürlich auch die von dir vorgeschlagene Variante verwenden. Du musst dann aber Warnungen ausschalten.

            Gibt es eine Abfrage der Art "if ($rc not numeric)" und würde diese dann keine Warnung liefern?

            Nein, aber eine Lösung steht in der Perlfaq

            Struppi.

  2. Hi,

    Wenn mich nur der Fall des vorhandenen Inhalts interessiert, wie kann ich dann am besten abfragen?

    Es gibt Dateioperatoren, die Du auf eine Datei oder einen Dateihandle anwenden kannst, z.B.

    -s FH # size
    -f FH # ist es eine Datei?
    -d FH # ist es eine Directory?
    -e FH # existiert da was (auch dev's)

    FH means FileHandle

    Siehe auch

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.