Experimental keys on scalar is now forbidden
Nach einem Wechsel der Interpreter- oder Compilerversion stolpert die neue Version ab und an über Dinge, die bisher problemlos verarbeitet wurden. Im aktuellen Fall mag Perl 5.28 eine Zeile nicht mehr, die von Perl 5.14 noch problemlos verarbeitet wurde:
Die fragliche Zeile
foreach $type ( keys $phonebook{ $entry } ) {
wird nur noch mit einem
Experimental keys on scalar is now forbidden at scriptname.pl line 123.
Type of arg 1 to keys must be hash or array (not hash element) at scriptname.pl line 123, near "} ) "
Execution of fritzphone.pl aborted due to compilation errors.
und das, obwohl es sich bei “%phonebook” um einen Hash handelt. Die Lösung des Problems ist glücklicherweise recht einfach und schnell erledigt
foreach $type ( keys %{ $phonebook{ $entry } } ) {
in dem der von “keys” auszuwertende Eintrag mit “%{ … }” als Hash gekennzeichnet wird.
@hosts = keys($diff->{‘diff’}->{$zone}->{‘uniq_a’});
Danke dir
mit so wenig Code schlecht zu beantworten, aber @hosts = keys( %{ $diff->{‚diff‘}->{$zone}->{‚uniq_a‘}} ); sollte funktionieren.