FHEM Forum

FHEM => Automatisierung => Perl für FHEM-User => Thema gestartet von: TomLee am 02 Februar 2022, 20:57:44

Titel: Querbeet
Beitrag von: TomLee am 02 Februar 2022, 20:57:44
Eine Perl-Laien-Frage:

Zitat von: CoolTux am 02 Februar 2022, 19:41:26
#!/usr/bin/perl
#
use strict;
use warnings;
use feature qw /say/;

my @zahlen = ( 34, 76, 23, 1, 5, 9, 4, 7, 234, 98, 34 );

say join ',', ( sort { $a <=> $b } (@zahlen) )[ 0, -1 ];

exit;

Die Angabe in eckigen Klammern, gehört die zu join, sehe das hier das erste Mal, das man die Indexe so einfach mit Komma getrennt angeben kann ?

join gibt aber einen Skalar zurück also kann es damit ja nix zu tun haben .

Mit dem Zugriffsoperator scheint das aber auch nix zu tun zu haben, weil sowas klappt nicht:

{my @ar=sort(14,12,2,23,3 );; $ar[0,2]}
2
Titel: Antw:Querbeet
Beitrag von: CoolTux am 02 Februar 2022, 21:19:45
Die eckigen Klammern gehören zum Slicing der Array Elemente. Also das rausnehmen von "Scheiben" aus einem Array. In diesem Fall der erste und der letzte Index des Arrays. Zerlegt würde es er so heißen

my @firstAndLast = @array[0,-1];
Titel: Antw:Querbeet
Beitrag von: TomLee am 02 Februar 2022, 22:21:11
Hi, Danke für die Antwort.

Habs nicht gleich verstanden gehabt, mich aber mit beschäftigt und ziehe daraus das :

my @firstAndLast = @array[0,-1];

nur eine andere Schreibweise von dem hier ist:

my @firstAndLast = ($array[0], $array[-1]);
Titel: Antw:Querbeet
Beitrag von: TomLee am 03 Februar 2022, 14:26:43
Hier komm ich bis jetzt auch nicht mit:

Zitat von: Beta-User am 03 Februar 2022, 08:54:34

Ansonsten mal vergleichen:
{min 3,9,12}
{List::Util::min 3,9,12}

{min 3,9,12}
ergibt bei mir 12

Mit List::Util:: dann 3

Warum klappts aber ohne List::Util:: mit Dezimalzahlen wie yersinia das zeigt ?

{min 3.497,3.491,3.494,3.499}
3.491
Titel: Antw:Querbeet
Beitrag von: Beta-User am 03 Februar 2022, 14:37:23
Zitat von: TomLee am 03 Februar 2022, 14:26:43
Hier komm ich bis jetzt auch nicht mit:

{min 3,9,12}
ergibt bei mir 12

Mit List::Util:: dann 3

Warum klappts aber ohne List::Util:: mit Dezimalzahlen wie yersinia das zeigt ?

{min 3.497,3.491,3.494,3.499}
3.491

Weil alle strings gleich lang sind und der Punkt anscheinend alphanumerisch vor den Zahlen kommt... Sobald da was "unklar" wird, paßt es eben mit dem Textvergleich (FHEM-"min") nicht, siehe:
{min 3,9,12.2}
Titel: Antw:Querbeet
Beitrag von: TomLee am 03 Februar 2022, 15:30:11
Ok, danke, nach weiteren Tests mit verschiedenen Werten komm ich denk ich jetzt mit, verinnerlicht hab ich das aber bestimmt noch nicht.
Titel: Antw:Querbeet
Beitrag von: Beta-User am 03 Februar 2022, 15:33:30
Einfache Regel: Perl wurde von einem Linguisten erfunden => für Perl ist alles erst mal ein Text...
Titel: Antw:Querbeet
Beitrag von: TomLee am 28 Februar 2022, 17:41:09
Hi,

ist eine schliessende eckige Klammer kein Zeichen ?
Warum entfernt mir chop die 0 und nicht die Klammer ?

{my $confr='bli bla 0]';;my @ar=split/ /,$confr;; return chop $ar[2];;}
Titel: Antw:Querbeet
Beitrag von: DeeSPe am 28 Februar 2022, 18:15:46
ZitatPerl chop()
The Perl chop() function removes last character from a string regardless of what that character is. It returns the chopped character from the string.

Deshalb.


Gruß
Dan
Titel: Antw:Querbeet
Beitrag von: DeeSPe am 28 Februar 2022, 18:19:32
{my $confr='bli bla 0]';;my @ar=split/ /,$confr;;my $ab=$ar[2];;chop $ab;;return $ab}
Ich denke das ist das was du willst.

Gruß
Dan
Titel: Antw:Querbeet
Beitrag von: TomLee am 28 Februar 2022, 18:37:26
Ja, danke, über den "Umweg" Variable gehts, hab ich selbst auch danach gemerkt, ich wollt noch editieren, kam aber bis jetzt ein Anruf dazwischen.