Autor Thema: Querbeet  (Gelesen 3212 mal)

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 4248
  • ... wer sät, der erntet ...
Querbeet
« am: 02 Februar 2022, 20:57:44 »
Eine Perl-Laien-Frage:

#!/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
« Letzte Änderung: 02 Februar 2022, 21:06:21 von TomLee »

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 27989
Antw:Querbeet
« Antwort #1 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];
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/
Mein Dokuwiki:
https://www.cooltux.net

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 4248
  • ... wer sät, der erntet ...
Antw:Querbeet
« Antwort #2 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]);

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 4248
  • ... wer sät, der erntet ...
Antw:Querbeet
« Antwort #3 am: 03 Februar 2022, 14:26:43 »
Hier komm ich bis jetzt auch nicht mit:


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

Offline Beta-User

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 18919
Antw:Querbeet
« Antwort #4 am: 03 Februar 2022, 14:37:23 »
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-T620@Debian 11, 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

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 4248
  • ... wer sät, der erntet ...
Antw:Querbeet
« Antwort #5 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.

Offline Beta-User

  • Moderator
  • Hero Member
  • ***
  • Beiträge: 18919
Antw:Querbeet
« Antwort #6 am: 03 Februar 2022, 15:33:30 »
Einfache Regel: Perl wurde von einem Linguisten erfunden => für Perl ist alles erst mal ein Text...
Server: HP-T620@Debian 11, 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

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 4248
  • ... wer sät, der erntet ...
Antw:Querbeet
« Antwort #7 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];;}

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4532
  • Wer anderen eine Bratwurst brät...
    • Buy me a coffee
Antw:Querbeet
« Antwort #8 am: 28 Februar 2022, 18:15:46 »
Zitat
Perl 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

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4532
  • Wer anderen eine Bratwurst brät...
    • Buy me a coffee
Antw:Querbeet
« Antwort #9 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
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

Offline TomLee

  • Hero Member
  • *****
  • Beiträge: 4248
  • ... wer sät, der erntet ...
Antw:Querbeet
« Antwort #10 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.