Thread Useless use of private variable in void context (9 answers)
Opened by der_thomas at 2014-01-06 23:07

der_thomas
 2014-01-06 23:07
#172866 #172866
User since
2013-09-07
158 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich bekomme hier eine Warnmeldung, einmalig direkt beim Programmstart, die ich nicht richtig einordnen kann:

Useless use of private variable in void context at listenmanipulator.pm line 197.
Useless use of private variable in void context at listenmanipulator.pm line 203.

Ich verstehe das so, dass ich eine Variable sinnlos nutze, also ohne dass diese Variable einen Einfluss auf irgendwas hätte ??

Hier der Code der das erzeugt:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/perl

use v5.12;
use warnings;

use Time::localtime;

package t;

my @testliste;
my $maxspalte;
my $zeiger;

......

sub get_new{        # in der Datensatzliste wandern, Argumente <<,<,>,>>
    my $richtung = shift;
    my @return;

    if ($richtung eq "<<"){$zeiger = 0}
    
    elsif ($richtung eq "<" && $zeiger > 0){
        my $zz = $zeiger - 1;
        for ($zz; $zz > -1; $zz--){                           #zeile 195
            if ($testliste[$zz][-1] == 1){$zeiger = $zz; last}
        }                                                     #zeile 197
    }
    
    elsif ($richtung eq ">" && $zeiger < $#testliste){
        my $zz = $zeiger + 1;
        for ($zz; $zz < $#testliste + 1; $zz++){              #zeile 201
            if ($testliste[$zz][-1] == 1){$zeiger = $zz;  last}
        }                                                     #zeile 203
    }

    elsif ($richtung eq ">>"){$zeiger = $#testliste}
    
    for my $spalte (0..$maxspalte){                           #zeile 207
        push (@return, $testliste[$zeiger][$spalte])
    }
    return @return                                            #zeile 210
}


Wenn ich die Zeilen 195-197 und 201-203 mit # auskommentiere, bleibt die Warnmeldung weg (Habe ich probeweise ausprobiert um auszuschließen dass es sich um einen Folgefehler handelt).

Zum Verständnis:
Mit dieser Funktion hole ich mir für das (GUI) Frontend die Datensätze, die in @testliste[]->[] abgelegt sind.
Wird beispielsweise der Datensatz Nr.10 gerade ausgegeben und ich rufe die Funktion mit t::get_new(">") auf, soll der nächste Datensatz per return (an den Aufrufer - das Frontend) geliefert werden.
$zeiger ist die aktuelle Position in der Datensatzliste, also im Beispiel 10
$testliste[$zeiger][-1] weist auf die letzte Datensatzspalte, steht dort eine 1, kann der Datensatz geliefert werden, steht dort ein 0 wird weitergesucht (Diese Indexspalte wird von einer Suchen Funktion beschrieben und standardmässig steht dort eine 1)

Funktionieren tut das alles wie vorgesehen, zumindest konnte ich bisher keinen Fehler im Programmablauf in Verbindung mit dieser Funktion entdecken.

Ich könnte das also übergehen, oder mit 'no warnings' überbrücken, ich will es aber eigentlich schon verstehen ;)

Weiß von euch jemand was ich da falsch mache oder falsch verstehe ?

P.S. Ich verwende Perl 5.14.2 auf Linux Mint 15

View full thread Useless use of private variable in void context