Hauptmenü

Querbeet

Begonnen von TomLee, 02 Februar 2022, 20:57:44

Vorheriges Thema - Nächstes Thema

TomLee

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

CoolTux

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];
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

TomLee

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]);

TomLee

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

Beta-User

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}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

Ok, danke, nach weiteren Tests mit verschiedenen Werten komm ich denk ich jetzt mit, verinnerlicht hab ich das aber bestimmt noch nicht.

Beta-User

Einfache Regel: Perl wurde von einem Linguisten erfunden => für Perl ist alles erst mal ein Text...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

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];;}

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

DeeSPe

{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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

TomLee

Ja, danke, über den "Umweg" Variable gehts, hab ich selbst auch danach gemerkt, ich wollt noch editieren, kam aber bis jetzt ein Anruf dazwischen.