Unpassender IOCTL ...

Unpassender IOCTL ...

am 10.03.2005 13:14:20 von Jan Teune

Hallo NG,
ich habe ein Problem, welches ich mir nicht erklären kann. Vielleicht
kann mir jemand von euch diese Fehlermeldung mal erklären...

Ich habe ein Objekt instanziert und versuche nun eine Methode daraus
aufzurufen...

$cluster_obj->seperate_sequences($_matrix,$min_dist,$max_dis t);

die Werte übernehme ich in der Routine wie folgt:

my $self = $_[0] or die "Problems with the Object $!";
my $_matrix = $_[1] or die "No value send here $!";
my $min = $_[2] or die "No value send here $!";
my $max = $_[3] or die "No value send here $!";

Starte ich das Programm, kommt die Fehlermeldung

No value send here Unpassender IOCTL (I/O-Control) für das Gerät at
line 168

2 Fragen hierzu, was hat es mit dieser Meldung auf sich und wie kann ich
sie umgehen?

Danke schon im Voraus

Jan

Re: Unpassender IOCTL ...

am 10.03.2005 13:21:59 von Frank Seitz

Jan Teune wrote:

> ich habe ein Problem, welches ich mir nicht erklären kann. Vielleicht
> kann mir jemand von euch diese Fehlermeldung mal erklären...
>
> Ich habe ein Objekt instanziert und versuche nun eine Methode daraus
> aufzurufen...
>
> $cluster_obj->seperate_sequences($_matrix,$min_dist,$max_dis t);
>
> die Werte übernehme ich in der Routine wie folgt:
>
> my $self = $_[0] or die "Problems with the Object $!";
> my $_matrix = $_[1] or die "No value send here $!";
> my $min = $_[2] or die "No value send here $!";
> my $max = $_[3] or die "No value send here $!";
>
> Starte ich das Programm, kommt die Fehlermeldung
>
> No value send here Unpassender IOCTL (I/O-Control) für das Gerät at
> line 168
>
> 2 Fragen hierzu, was hat es mit dieser Meldung auf sich und wie kann ich
> sie umgehen?

Die Meldung "No value send here ..." generierst Du doch selbst.
Sie kommt, wenn einer Deiner Parameter zu "falsch" evaluiert
(0, Leerstring oder undef). Der Teil "Unpassender IOCTL
(I/O-Control) für das Gerät" rührt von der Variable $! her,
die in Deiner Fehlermeldung garnicht stehen sollte. Nimm sie raus.

Gruß
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Re: Unpassender IOCTL ...

am 10.03.2005 21:24:49 von Jan Teune

Hallo Frank,
das ich die Meldung mit "No value send here $!" selber generiert habe,
ist mir schon klar. Was ich wissen wollte ist, wieso ich in Perl keinen
Leerstring bzw eine "0" als Wert übergeben darf...

Mir ist auch bewusst, das durch das logische "or" der rechte Teil des
Statements ausgewertet wird...

Aber wie kann man sowas umgehen, ich würd halt gern immer überprüfen, ob
an den Stellen werte übergeben wurden und der soll ja nur "sterben" wenn
da ein Uninitialized Value übergeben wird...

Falls du da auch eine Antwort drauf hast, wäre ich dir sehr dankbar :-)

Tschökes

Frank Seitz schrieb:
>
> Die Meldung "No value send here ..." generierst Du doch selbst.
> Sie kommt, wenn einer Deiner Parameter zu "falsch" evaluiert
> (0, Leerstring oder undef). Der Teil "Unpassender IOCTL
> (I/O-Control) für das Gerät" rührt von der Variable $! her,
> die in Deiner Fehlermeldung garnicht stehen sollte. Nimm sie raus.
>
> Gruß
> Frank

Re: Unpassender IOCTL ...

am 10.03.2005 21:36:04 von Frank Seitz

Jan Teune wrote:

> Was ich wissen wollte ist, wieso ich in Perl keinen
> Leerstring bzw eine "0" als Wert übergeben darf...

Klar darfst Du das. Nochmal: Den Ausstieg hast Du doch
selbst programmiert.

> ich würd halt gern immer überprüfen, ob
> an den Stellen werte übergeben wurden und der soll ja nur "sterben" wenn
> da ein Uninitialized Value übergeben wird...

Dann teste mit defined().

$ perldoc -f defined

Oder teste mit @_ == 4, ob alle vier Parameter vorhanden sind.

Ich selbst halte das, was Du da machst, allerdings für überflüssig.
Schalte Warnungen ein (-w oder use warnings), dann produziert
Perl bei illegaler Verwendung von undefinierten Werten
entsprechende Meldungen.

Gruß
Frank
--
Dipl.-Inform. Frank Seitz; http://www.fseitz.de/
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel