Perl: Zeile verstehe ich nicht...

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Moin kann mir jemand die Zeile erklären:

    Code
    #!/opt/soft/bin/perl
    my $a = 22;
    my $b = 3;
    
    
    my $c = ($a,$b) [$a < $b];
    
    
    print $c

    Es wird nur der größere Wert von beiden ausgegeben - aber wie funktioniert das?

    Verstehe ich das richtig:

    Gebe $a aus wenn $a kleiner $b FALSE ist
    Gebe $b aus wenn $a kleiner $b WAHR ist

    Aber warum so rum? Ich hätte es anders herrum erwartet. Jemand ne Idee wo ich das nach lesen kann? Oder kann es mir erklären?

    Gruß Lunepi

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

  • Sagen wir so Perl ist geil, aber es bietet auch irgendwelchen drogenkonsumierenden Kellerprogramierern die Möglichkeit sich ein Denkmal zusetzen mit Zeilen die selbst Larry nicht mehr versteht. ;)

    Wo bei diese Zeilen bestimmt relativ einfach sind.... nur für ich nicht.....

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

    Einmal editiert, zuletzt von Lunepi (9. Juli 2014 um 15:20)

  • Von Python kenne ich das so:

    Code
    >>> [0,1,2,3,4,5,6,7] [3]
    3


    Das erste Feld gibt den Inhalt an, das zweite setzt den Zeiger auf 3.
    In Deinem Fall ist das False=0 und True=1.
    Mehr kann ich da leider nicht zu beitragen, aber gibt ja hier Perl-Kenner die das sicher besser erklären können.

    ...and write down with pencil&paper...
    Where can i download "pencil&paper" ?

  • Selbiges Ergebnis erhält man in Python:

    Code
    >>> print (22,3)[22<3]
    22
    >>> print (3,22)[3<22]
    22

    In Python ist int(True) = 1 und int(False) = 0.

    Dasselbe liegt auch in Perl vor - nur dass da int(True) = 1 und int(False) = nix und nix als Integer 0 ist. Ist ziemlich krude in Perl, denn da gibt es kein explizites True und False in der Sprache.


  • Selbiges Ergebnis erhält man in Python:

    Code
    >>> print (22,3)[22<3]
    22
    >>> print (3,22)[3<22]
    22

    In Python ist int(True) = 1 und int(False) = 0.

    Dasselbe liegt auch in Perl vor - nur dass da int(True) = 1 und int(False) = nix und nix als Integer 0 ist. Ist ziemlich krude in Perl, denn da gibt es kein explizites True und False in der Sprache.


    Ah jetzt wird ein Schuh draus: (22,3) ist ein array mit a<b = True also 1 wird das Element mit Index 1 zurück gegeben, bei a<b = False also 0 wird des Element mit Index 0 zurückgegeben.

    Es funktioniert, aber das ist absolut krank und "fast" nicht lesbar. Naja wieder ein Programierer der nach dem hier schon häufiger gelesen Motto lebt - dieses Ding mit Wahnsinn, Genie, Erfolg.... Naja Ihr wisst schon ;)

    Danke noch mal!

    Gruß Lunepi

    --
    man ist das System-Anzeigeprogramm für die Handbuchseiten von Linux.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!