FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: igami am 03 Dezember 2015, 07:45:21

Titel: (gelöst) checkDEF
Beitrag von: igami am 03 Dezember 2015, 07:45:21
Hallo zusammen,

ich bin momentan dabei mein FHEM so zu verbiegen, dass ich Automationen über Attribute generiere, sollte sich hier mal etwas ändern möchte ich nur die betreffenden Code Zeilen ändern.

Nun habe ich das Problem, dass  ein vergleich mittels eq nicht zutrifft, obwohl die Ausgaben über return identisch sind.

sub checkDEF{
  my $DEF = InternalVal("define_default_notify", "DEF", undef);
  my @def = (
                     q[global.DEFINED.default.*],
                     q[  attr $EVTPART1 room default;],
                     q[  attr $EVTPART1 subType default;],
                     q[  attr $EVTPART1 userattr attributes regexp]
                    );

  my $desired = join("\n", @def);

  return "$DEF \n\n $desired";
}


global.DEFINED.default.*
  attr $EVTPART1 room default;
  attr $EVTPART1 subType default;
  attr $EVTPART1 userattr attributes regexp

global.DEFINED.default.*
  attr $EVTPART1 room default;
  attr $EVTPART1 subType default;
  attr $EVTPART1 userattr attributes regexp


Wie müsste ich die beiden Variablen vergleichen um ein true zu erhalten?

Danke und Grüße
igami
Titel: Antw:checkDEF
Beitrag von: fiedel am 03 Dezember 2015, 11:00:35
Hilft das  (http://www.perl-community.de/bat/poard/thread/16630)vielleicht?
Titel: Antw:checkDEF
Beitrag von: igami am 03 Dezember 2015, 12:58:20
Habe es nun umgestellt zu

sub checkDEF{
  chomp(my $DEF = InternalVal("define_default_notify", "DEF", undef));
  my @def = (
             q[global.DEFINED.default_.*],
             q[  attr $EVTPART1 disable 1;],
             q[  attr $EVTPART1 room default;],
             q[  attr $EVTPART1 subType default;],
             q[  attr $EVTPART1 userattr attributes regexp]
            );
  chomp(my $expected = join("\n", @def));

  #return "$DEF\n\n$expected";
  return 1 if($DEF eq $expected);
}

Die Ausgaben sind identlisch laut http://text-compare.com/ (http://text-compare.com/), leider immer noch keine 1 bei

$DEF eq $expected

In der Ausgabe sehe ich jedoch auch immer noch Zeilenumbrüche.
Titel: Antw:checkDEF
Beitrag von: igami am 03 Dezember 2015, 13:17:23
Habe es nun so gelöst

sub checkDEF{
  my $DEF = join("", split("\n", InternalVal("define_default_notify", "DEF", undef)));
  my @expected = (
             q[global.DEFINED.default_.*],
             q[  attr $EVTPART1 disable 1;],
             q[  attr $EVTPART1 room default;],
             q[  attr $EVTPART1 subType default;],
             q[  attr $EVTPART1 userattr attributes regexp]
            );
  my $expected = join("", @expected);

  return 1 if($DEF eq $expected);
}

Ich vermute, dass das chomp nicht funktioniert hat, da der Zeilenumbruch nicht am Ende, sondern mittem im Text ist.