my $f0="%-22s %s\n";
my $f1='%-22s' .$f0;
my $f2=' %-18s' .$f0;
my $f3=' %-14s' .$f0;
my $f4=' %-10s' .$f0;
sub printList {
my $self = shift;
my $fh = shift;
foreach my $struct (sort values %{$self->list}) {
my $type = $struct->type;
if ( $type =~ /LIGHT|FAN|CAMERA|CHRISTMAS/ ) {
printf $fh $f4, $type,$struct->name,$struct->hu;
}
else{
my ($ftop,$fline);
if ( $type =~ /ZONE/ ) { $ftop=$f1; $fline=$f2;}
if ( $type =~ /GROUP/ ) { $ftop=$f2; $fline=$f3;}
if ( $type =~ /AREA/ ) { $ftop=$f3; $fline=$f4;}
printSet($struct,$fh,$ftop,$fline);
printList($struct,$fh);
}
}
}
sub printSet {
my $struct=shift;
my $fh=shift;
my $ftop=shift;
my $fline=shift;
$name = $struct->name;
printf $fh $ftop, $struct->type,$name,$struct->hu;
for my $method (qw/security state battery/) { printf $fh $fline,uc($
+method),$name,$struct->$method; }
}
sub printConfig {
my $configfile = shift;
my $house = shift;
my $space = "";
open(my $fh, ">$configfile");
printSet($house,$fh,$f1,$f2);
printList($house,$fh,$house->type);
close($fh);
}
Of most interest here is that "methods" are nothing but string literals.