Autor Thema: Fehler mit perl v5.24.1: Experimental each on scalar is now forbidden  (Gelesen 8137 mal)

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4901
Antw:Fehler mit perl v5.24.1: Experimental each on scalar is now forbidden
« Antwort #15 am: 08 November 2016, 20:52:31 »
nun ja - am Ende muss das jeder Autor für sich entscheiden. Die Meldungen "experimental" und "depraced" gibt es dazu lange genug.

Ein Autor sollte wissen wann und warum er "no warnings" einsetzt und wenn er das tut dann hat er vermutlich eine Grund. Für viele Ausnahmen (refs, redefine etc) gibt es ja durchaus legitime Gründe. (für warnings  fällt mir keiner ein)

vg
joerg
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15517
  • s/fhem\.cfg/configDB/g
Antw:Fehler mit perl v5.24.1: Experimental each on scalar is now forbidden
« Antwort #16 am: 08 November 2016, 20:55:23 »
Für viele Ausnahmen (refs, redefine etc) gibt es ja durchaus legitime Gründe.

jepp :)

(für warnings  fällt mir keiner ein)

mir schon: unbedarfte fhem user, die bei jeder WARNING in ihrem Logfile sofort in Panik geraten und das Forum mit "Fehler-Threads" überschwemmen, weil sie eine Warnung nicht von einem Fehler unterscheiden können (oder wollen).
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 22.03.2019 - 18:30 Uhr im Baseler Hof

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4901
Antw:Fehler mit perl v5.24.1: Experimental each on scalar is now forbidden
« Antwort #17 am: 08 November 2016, 21:12:48 »
naja, idr kann der Autor dort ja genauso gut die Ursache der Warnung entfernen (undefined zb: $var||'' )
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4396
Antw:Fehler mit perl v5.24.1: Experimental each on scalar is now forbidden
« Antwort #18 am: 09 November 2016, 20:42:55 »
Ich achte mittlerweile tunlichst darauf, keine Warnungen zu erzeugen, um keine Anfragen von verunsicherten Usern zu bekommen. Aber ich sehe nicht jeden Anwendungsfall voraus und die meisten Warnungen kommen bei meinen Modulen aus der Konkatenation mit undef.

Bewusst schalte ich nur experimental aus. Habe ich irgendwo überlesen, dass experimentelle Sprachfeatures wieder entfernt werden? Ich nutze sehr gerne den ~~-Operator - ist ein sehr nützliches Ding. Aber ich will nicht jeden Monat einen Beitrag lesen, was die Warnung im Log denn bedeute.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4901
Antw:Fehler mit perl v5.24.1: Experimental each on scalar is now forbidden
« Antwort #19 am: 09 November 2016, 23:31:08 »
ich kann die Quelle nicht mehr benennen, aber ja:

experimental wird gekennzeichnet weil die Konstrukte nicht vollständig auf Nebenwirkungen getestet sind und weil nicht sicher ist das die features Bestand haben. Die Liste der wieder abgeschalteten features ist sogar beachtlich lang.

Für mich zb ein Grund smartmatches (so schön die auch sind) nicht zu verwenden und bei bei each verwende ich deswegen die (minimal) umständlichere de-referenzierte Variante. Bzgl der warning bin ich allerdings auch sehr pedantisch veranlagt, Daher verwende ich auf das $var||'' construct an Stellen wo ein undef (Beispiel log) vorkommen kann. In Summe empfinde ich das auch sehr gut. Es kommt durchaus vor das ich im log über eine warning stolpere und dadurch eigene Fehler (idr Logik) identifiziere

vg
joerg
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18644
Antw:Fehler mit perl v5.24.1: Experimental each on scalar is now forbidden
« Antwort #20 am: 09 November 2016, 23:45:48 »
achtung: mit $var|| das macht nicht immer was du möchtest da die linke seite nicht auf defined geprüft wird sondern auf true. d.h. wenn $var 0 oder '' ist ist die rechte seite das ergebniss. das kann, muss aber nicht das beabsichtigte sein.

um auf defined zu prüfen gibt es $var//. aber leider nicht in äderten perl versionen.

zu den experimental features: ja. es sind einige schon mal wieder rausgeflogen oder haben sich (was noch schlimmer ist) in ihrer logik/funktion/verhalten geändert.

gruss
  andre
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH

Offline herrmannj

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4901
Antw:Fehler mit perl v5.24.1: Experimental each on scalar is now forbidden
« Antwort #21 am: 09 November 2016, 23:59:09 »
Zitat
wenn $var 0 oder '' ist ist die rechte seite das ergebniss.
ja absolut, Danke. Vergesse manchmal das solche threads als Orientierung dienen.

Die komplette Kette besteht aus der Überlegung ob ich eine Zahl oder einen Text erwarte:

numerisch: $var||0
string: $var||''     (führt bei string $var = '0' zur einer Abweichung)

Alternativ (etwas umständlicher) kann man unklare Fälle so behandeln:
$var = defined($var)?$var:'hier könnte ihre Werbung stehen'; # ggf anderer Text ;)

vg
joerg
 
smartVisu mit fronthem, einiges an HM, RFXTRX, Oregon, CUL, Homeeasy, ganz viele LED + Diverse

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4396
Antw:Fehler mit perl v5.24.1: Experimental each on scalar is now forbidden
« Antwort #22 am: 10 November 2016, 18:56:11 »
Für mich zb ein Grund smartmatches (so schön die auch sind) nicht zu verwenden und bei bei each verwende ich deswegen die (minimal) umständlichere de-referenzierte Variante.

Was meinst Du bzw. wie geht das?

Ich verwende smartmatch ausschließlich zur Prüfung, ob ein Skalar in einem Array aufgeführt ist.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 15517
  • s/fhem\.cfg/configDB/g
Antw:Fehler mit perl v5.24.1: Experimental each on scalar is now forbidden
« Antwort #23 am: 12 November 2016, 11:27:54 »
Ich nutze sehr gerne den ~~-Operator - ist ein sehr nützliches Ding.

Aber für die perl-Performance eine absolute Katastrophe.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.
-----------------------
Nächster Hamburg-Stammtisch: 22.03.2019 - 18:30 Uhr im Baseler Hof

Offline Dr. Boris Neubert

  • Global Moderator
  • Hero Member
  • ****
  • Beiträge: 4396
Antw:Fehler mit perl v5.24.1: Experimental each on scalar is now forbidden
« Antwort #24 am: 12 November 2016, 11:45:18 »
Aber für die perl-Performance eine absolute Katastrophe.

Wie würdest Du effizient (knackiger, performanter Code) prüfen, ob ein Skalar in einem Array enthalten ist?

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Offline justme1968

  • Developer
  • Hero Member
  • ****
  • Beiträge: 18644
Antw:Fehler mit perl v5.24.1: Experimental each on scalar is now forbidden
« Antwort #25 am: 12 November 2016, 11:50:19 »
das hängt doch vom kontext ab.
- wenn es oft vorkommt und sich das array selten/nicht ändert -> besser (zusätzlich) hash statt array verwenden und darüber suchen
- wenn man das array sortieren kann -> binäre (oder andere) suche
- sonst einfach mit grep -> if( grep {$_ eq $var} @array ) {...}

gruss
  andre
FHEM5.4,DS1512+,2xCULv3,DS9490R,HMLAN,2xRasPi
CUL_HM:HM-LC-Bl1PBU-FM,HM-LC-Sw1PBU-FM,HM-SEC-MDIR,HM-SEC-RHS
HUEBridge,HUEDevice:LCT001,LLC001,LLC006,LWL001
OWDevice:DS1420,DS18B20,DS2406,DS2423
FS20:fs20as4,fs20bs,fs20di
AKCP:THS01,WS15
CUL_WS:S300TH