Thread array wird falsch/nicht belegt.... (12 answers)
Opened by Gast at 2008-01-30 17:55

Strat
 2008-01-31 13:55
#105386 #105386
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Struppi+2008-01-31 11:50:23--
Code (perl): (dl )
while( <TEXTDAT> ) {


diese Schreibweise kann zu schwierig zu findenden Fehlern führen, weil da das globale $_ verändert wird (im Gegensatz zu foreach (<TEXTDAT>), was einen Alias verwendet). Deshalb da immer einen "Laufvariable" verwenden:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
while( my $line = <TEXTDAT> ) {
        chomp $line;
        my @daten = split( /!/, $line );
        if($merker != $daten[1]) {
                $merker = $daten[1];
                $hits++;
                push @array, $merker;
        }
        
}

Besser noch lokale filehandles verwenden, z.B.

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl
use strict;
use warnings; # besser als -w, weil es nur die aktuelle Datei betrifft

my $file = "text.txt";
open( my $TEXTDAT, '<', $file ) or die "Error: couldn't open file '$file': $!";
<$TEXTDAT> for 0..4; # ok, weil for bei $_ einen alias auf den Wert enthält, der nach ende der Schleife "wiederhergestellt" wird.
my $merker = '';
my @array;
while( my $line = <$TEXTDAT> ) {
        chomp $line;
        my @daten = split( /!/, $line );
        if($merker != $daten[1]) {
            $merker = $daten[1];
            $hits++;
            push @array, $merker;
        }
        
}
close $TEXTDAT;
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/

View full thread array wird falsch/nicht belegt....