Autor Thema: selektives "use" ?  (Gelesen 249 mal)

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3682
selektives "use" ?
« am: 24 April 2019, 15:39:11 »
Hi,
wenn ich am Anfang des Moduls "use Paws" reinhänge, zwinge ich imho alle User dieses Modul zu installieren damit mein TTS läuft.
Gibt es da ein charmateren Weg? Oder verstehe ich es falsch?
zb. nicht meckern wenn Paws nicht verfügbar ist, erst meckern wenn ich das Modul verwenden will

Can't locate Paws.pm in @INC (you may need to install the Paws module) (@INC contains: ./FHEM/lib ./lib fhem.p/lib fhem.p/FHEM/lib ./FHEM ./ /usr/local/FHEM/share/fhem/FHEM/lib . /etc/perl /usr/local/lib/x86_64-linux-gnu/perl/5.24.1 /usr/local/share/perl/5.24.1 /usr/lib/x86_64-linux-gnu/perl5/5.24 /usr/share/perl5 /usr/lib/x86_64-linux-gnu/perl/5.24 /usr/share/perl/5.24 /usr/local/lib/site_perl /usr/lib/x86_64-linux-gnu/perl-base) at ./FHEM/98_Text2Speech.pm line 30.
BEGIN failed--compilation aborted at ./FHEM/98_Text2Speech.pm line 30.
FHEM auf ASRock J3455-ITX im 19" Rack mit Homematic, MAX, PCA301, Panstamp-Sensoren, RPi mit 2x 1wire, RPi mit Text2Speech.
Maintainer der Module: DbLog, Text2Speech, TrashCal, MediaList
Meine Projekte auf https://github.com/tobiasfaust

Offline Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3633
  • ~ Challenging Innovation ~
Antw:selektives "use" ?
« Antwort #1 am: 24 April 2019, 15:44:16 »
Beispiel:

eval {
    require JSON::MaybeXS;
    import JSON::MaybeXS qw( decode_json encode_json );
    1;
};
if (!$@) {
....
}


Aber: Sofern du zum FHEM Installer kompatibel sein möchtest, solltest dein Modul bei einem eigenen Errorhandling auch noch eine Funktion bieten, auch wenn das Perl Modul nicht installiert ist. Wenn es hingegen zwingend notwendig für die sinnvolle Nutzung ist, dann solltest du es beim normalen "use" belassen.
« Letzte Änderung: 24 April 2019, 15:46:30 von Loredo »
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER

Offline Tobias

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3682
Antw:selektives "use" ?
« Antwort #2 am: 24 April 2019, 17:03:12 »
Danke, hat mir sehr geholfen.
Ich habe das require im eval Block innerhalb der attr set funktion untergebracht. So wird es erst geprüft und geladen wenn das TT_Ressource Attribute auf Amazon-Polly gestellt wird :)
FHEM auf ASRock J3455-ITX im 19" Rack mit Homematic, MAX, PCA301, Panstamp-Sensoren, RPi mit 2x 1wire, RPi mit Text2Speech.
Maintainer der Module: DbLog, Text2Speech, TrashCal, MediaList
Meine Projekte auf https://github.com/tobiasfaust