Hilfe bei Fehlermeldung benötigt - PERL

Hallo,

ich habe nicht viel Ahnung von Perl, kan gerade so entziffern was ungefähr passieren soll…

wir haben in einem Script einen Fehler allerdings nur bei einer Umgebung - hier ist eine neuere PERL-Version installiert.

defined(@array) is deprecated at /usr/global/bin/bunixlib.pl line 1608.
(Maybe you should just omit the defined()?)

Zeile 1608:

1603 sub winpopup {
1604
1605 my ( $text, @hosts ) = @_ ;
1606 my ( $host, $host_adress, $winsmaster, $line, @cols ) ;
1607
1608 if ( (! defined $text) || ( ! defined @hosts ) ) {
1609 &logt („ERROR: text or hostlist is missing !“,5) ;
1610 return $FALSE ;
1611 }

soweit ich das bisher rausgefunden habe muß man statt defined mittlerweile exists verwenden, habe das auch einfach mal auf Blöd versucht

1603 sub winpopup {
1604
1605 my ( $text, @hosts ) = @_ ;
1606 my ( $host, $host_adress, $winsmaster, $line, @cols ) ;
1607
1608 # if ( (! defined $text) || ( ! defined @hosts ) ) { # geaendert 14.11.2006
1609 if ( (! exists $text) || ( ! exists @hosts ) ) {
1610 &logt („ERROR: text or hostlist is missing !“,5) ;
1611 return $FALSE ;
1612 }

Das funktioniert allerdings nicht hier die Fehlermeldung:

exists argument is not a HASH or ARRAY element at /rks/programs/admin/bin/bunixlib.pl line 1609.

kann mir das einer umstricken oder benötigt ihr dafür mehr Infos (code) ?

Grüße

Chris

Hallo,

> defined(@array) is deprecated at /usr/global/bin/bunixlib.pl  
> line 1608.  
> (Maybe you should just omit the defined()?)

Englisch omit = weglassen.

> 1603 sub winpopup {  
> 1604  
> 1605 my ( $text, @hosts ) = @\_ ;  
> 1606 my ( $host, $host\_adress, $winsmaster, $line, @cols  
> ) ;  
> 1607  
> 1608 if ( (! defined $text) || ( ! defined @hosts ) ) {

if ( (! $text) || ( ! @hosts ) ) {


> 1609 &logt ("ERROR: text or hostlist is missing !",5) ;  
> 1610 return $FALSE ;  
> 1611 }

soweit ich das bisher rausgefunden habe muß man statt defined
mittlerweile exists verwenden, habe das auch einfach mal auf
Blöd versucht

exists überprüft, ob ein Element eines Hashs vorhanden ist, ist also nicht das, was du brauchst. S.o, einfach weglassen.

Das war übrigens mal eine vorbildliche Fehlerbeschreibung (naja, die Perlversion hätte man noch angeben können :wink:, da macht das Antworten richtig Spass.

Grüße,
Moritz

Auch hallo.

ich habe nicht viel Ahnung von Perl, kan gerade so entziffern
was ungefähr passieren soll…

‚You are not alone‘ :wink:

wir haben in einem Script einen Fehler allerdings nur bei
einer Umgebung - hier ist eine neuere PERL-Version
installiert.

Welches Betriebssystem ? Windows XP mit ActivePerl 5.8.8 ?
Oder Suse Linux 9.0 mit Perl 5.8.1 ?

defined(@array) is deprecated at /usr/global/bin/bunixlib.pl
line 1608.
(Maybe you should just omit the defined()?)
soweit ich das bisher rausgefunden habe muß man statt defined
mittlerweile exists verwenden, habe das auch einfach mal auf
Blöd versucht

Immerhin sind die Befehle defined() und exists() sind die Gegenstücke zu undef() und delete()…

1603 sub winpopup {
1604
1605 my ( $text, @hosts ) = @_ ;
1606 my ( $host, $host_adress, $winsmaster, $line, @cols
) ;
1607
1608 # if ( (! defined $text) || ( ! defined @hosts ) ) {

geaendert 14.11.2006

1609 if ( (! exists $text) || ( ! exists @hosts ) ) {
1610 &logt („ERROR: text or hostlist is missing !“,5) ;
1611 return $FALSE ;
1612 }

Idee in 1609: if ((!exists($text)) || (!exists(@hosts)) {…}

kann mir das einer umstricken oder benötigt ihr dafür mehr
Infos (code) ?

U.U. schon, wenn die obige Idee auch scheitert…

HTH
mfg M.L.

Hallo,

ich habe jetzt erstmal die Lösung von Moritz eingetragen, der Test läuft heute Nacht…

Um die letzten Fragen noch zu beantworten

Machine hardware: sun4u
OS version: 5.8
Processor type: sparc
Hardware: SUNW,Sun-Fire-15000

This is perl, v5.8.3 built for sun4-solaris-thread-multi
(with 8 registered patches, see perl -V for more detail)

Copyright 1987-2003, Larry Wall

Binary build 809 provided by ActiveState Corp. http://www.ActiveState.com
ActiveState is a division of Sophos.
Built Feb 3 2004 00:32:12

und falls das nicht ganz ersichtlich ist:
Parameter: $text = Text der Meldung
@hosts = Array mit Liste der Empfangsrechner (Windows)

Grüße

Chris

Nachtrag
Hallo,

hab nochmal die perldoc-Seite zu defined geblättert, und anscheinend kann man das bei Skalaren durchaus noch verwenden. Wenn es also mit der bisherigen Lösung nicht geht, das defined $text so lassen wie es ist, und nur das defined vor @hosts weg machen, also

1608 if ( (! defined $text) || ( ! defined @hosts ) ) {

if ( (! $text) || ( ! @hosts ) ) {

if ( (! defined $text) || ( ! @hosts ) ) {

HTH,
Moritz

kwt