Autor Thema: Wie use Meta aber nur wenn Meta auch vorhanden ist ?  (Gelesen 591 mal)

Offline Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4544
Wie use Meta aber nur wenn Meta auch vorhanden ist ?
« am: 04 April 2020, 19:21:09 »
Ich häng jetzt schon den halben Nachmittag ein einem Problem fest mit dem ich nicht weiterkomme.
Die meisten Modulautoren schreiben einfach ein use FHEM::Meta  oder use Meta in ihre Module.
Ich möchte dies nicht so tun, da mein Modul auch auf ältereren Systemen laufen soll wo es Meta.pm noch gar nicht gab.
(Meta.pm ist ja wirklich nicht lebensnotwendig :) )
DS_Starter hat das in seinen Modulen IMHO recht  elegant gelöst , er schreibt einfach :
eval "use FHEM::Meta;1"       or my $modMetaAbsent     = 1;und macht später das ganze Meta Gedöns von $modMetaAbsent abhängig, So schön das auch ist, leider meckert aber perlcritic
Zitat
Expression form of "eval" at line blablub , column 1.  See page 161 of PBP.  (Severity: 5)
Aus dem Text auf Seite 161ff aus PBP werd ich nicht schlau. Ich habe jetzt etliches probiert mit eval {}; dann ist auch perlcritic still, nur es macht dann aber auch nicht was es soll :(

 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Offline mahowi

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1207
Antw:Wie use Meta aber nur wenn Meta auch vorhanden ist ?
« Antwort #1 am: 04 April 2020, 20:18:25 »
Laut https://www.perlmonks.org/?node_id=691741 sollte das klappen:
eval "use FHEM::Meta";
if ( $@ ) {
     $modMetaAbsent = 1;
}
CUBe (MAX): HT, FK | CUBe (SlowRF): ESA2000WZ
JeeLink: LaCrosse | nanoCUL433: Smartwares SHS-51001-EU, EM1000GZ
ZME_UZB1: GreenWave PowerNode, Popp Thermostat | SIGNALDuino: HE877, X10 MS14A, Revolt NC-5462,  IT Steckdosen + PIR
tado° | Milight | HUE, Lightify | SmarterCoffee

Offline RichardCZ

  • Tester
  • Sr. Member
  • ****
  • Beiträge: 597
  • WHIP! HoBo war gestern.
    • Experimenteller FHEM Fork
Antw:Wie use Meta aber nur wenn Meta auch vorhanden ist ?
« Antwort #2 am: 04 April 2020, 20:18:54 »
Da Meta ja vermutlich nicht zur Laufzeit dazukommt, fällt mir spontan ein

eval { use Meta; }
oder

BEGIN {
 require $modul if (-e $modul_path);
}

genaueres: https://stackoverflow.com/questions/3945583/how-can-i-conditionally-use-a-module-in-perl
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

Offline Wzut

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4544
Antw:Wie use Meta aber nur wenn Meta auch vorhanden ist ?
« Antwort #3 am: 05 April 2020, 13:47:27 »
danke auch. @mahowi, dein eval "use FHEM::Meta"; ist keine Lösung für perlcritic.
@Richard, da könnte ich mir jetzt wieder in den A.... beissen , auf die -e Idee hätte ich auch selbst kommen können .... k.A. warum ich da wieder so kompliziert gedacht habe :( Anyway , nun klappt es.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

 

decade-submarginal