Moin,
der Versuch, in der Datenbank vorhandene Werte "off" durch 0 zu ersetzen
set dbrep changeValue old="off" new="0"
scheitert mit der Fehlermeldung
Both entries old="old string" new="new string" are needed.
Offenbar berücksichtigt die Fehlerbehandlung im Modul
elsif ($opt =~ /changeValue/) {
my ($ac, $hc) = parseParams(join ' ', @a);
my $oldval = $hc->{old};
my $newval = $hc->{new};
if (!$oldval || !$newval) {
return qq{Both entries old="old string" new="new string" are needed.};
}
nicht, dass es durchaus einen gewünschten Wert 0 geben kann.
!$newval ergibt eben true, wenn $newval == 0
(Das gleiche Verhalten dürfte auch bei oldval == 0 auftreten)
Hallo betateilchen,
danke für die Info.
Das ist natürlich so nicht gewünscht.
Ändere ich in
if (!defined $oldval || !defined $newval) {
...
Das sollte dann passen.
LG
Ist gefixt und eingecheckt.
ähm... ich glaube nicht, dass die Lösung so einfach ist.
Hast Du sowas mal probiert:
set dbrep changeValue old="off" new=
Syntaktisch falsch, aber dbrep löscht damit kommentarlos die vorhandenen Werte, was ich auch nicht für richtig halte.
Stimmt auch wieder...
if ($oldval eq '' || $newval eq '') {
...
sollte es tun.
Teste gerade ein paar Szenarien.
Sieht gut für mich aus.
Habe die V ins Repo gestellt. Kannst gerne von deiner Seite aus gegenchecken.
Kann man so machen, aber warum die Prüfung nicht einfach frühestmöglich machen?
Dein Ansatz mit defined() war ja grundsätzlich gut, nur zu spät.
elsif ($opt =~ /changeValue/) {
my ($ac, $hc) = parseParams(join ' ', @a);
if (!defined($hc->{old}) || !defined($hc->{new})) {
return qq{Both entries old="old string" new="new string" are needed.};
}
my $oldval = $hc->{old};
my $newval = $hc->{new};