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
Hilft das (http://www.perl-community.de/bat/poard/thread/16630)vielleicht?
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.
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.