Thread Wie kriege ich meinen Array aus der Funktion wieder raus ? (9 answers)
Opened by mzurhorst at 2012-04-12 00:13

mzurhorst
 2012-04-12 00:13
#157406 #157406
User since
2012-03-28
9 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen!

Ich verzweifele gerade, weil ich meinen Array nicht aus der Funktion raus kriege. Irgendwie finde ich jede Menge Tipps im Internet, und die sind lustigerweise auch alle einig. Aber entweder ich mach's total falsch, oder nur bei mir klappt das nicht.

Meine Funktion an sich funktioniert super. Am Ende habe ich da innen drin in meinem Array eine Liste mit Verzeichnisnamen drin, die sich verändert haben auf meiner Festplatte.

Nun möchte ich zurück in die Hauptroutine hüpfen und mit diesen Verzeichnissen weiter arbeiten.

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
sub identify_changed_dirs {
    my @dirs = "";
    my $touchfile    = $gcfounds2mysqlconfig{''}{'touchfile'};
    my $gcdir        = $geologconfig{''}{'directory'};

    # append the sub directory "found" to the working directory
    $gcdir .= "/found/";

    # determine the timestamp of the previous script run
    my $timestamp = ( stat("$touchfile") )[9];

    # change the directory to $gcdir
    chdir($gcdir) or die "Error: Cannot change to working directory!\n   $!";
    print "DEBUG 1: changed to the working directory\n$gcdir\n";

    # open directory and read all sub directories
    opendir( DIR, '.' )
      or die "Error: Working directory cannot be opened!\n   $!";
    my $i = 0;    #index variable
    while ( my $subdir = readdir(DIR) ) {

        # we skip the two special directories ./ and ../
        if ( $subdir eq "." )  { next; }
        if ( $subdir eq ".." ) { next; }

        # seems unneccessary to calculate the full path!
        # my $fullpath = $gcdir . $subdir . "\/";
        
        # test whether the current object is a directory
        if ( -d $subdir ) {
            
            # calculate the mtime of the $subdir
            my $subdir_mtime = ( stat("$subdir") )[9];
            
            if ( $subdir_mtime > $timestamp ) {
                $i++;    #index will be raised when we find a changed directory
                # TODO TODO: delete this print
                print "Untersuchung fand $i. geändertes Verzeichnis!\n";

                # Now we push this sub directory in the array!
                # Splices replaces the push here!
                splice( @dirs, @dirs, 0, $subdir );
                print @dirs[-1] . "\n";
            }
        }
        print ".\n";

        # TEST Early exit for testing
        # if ($i == '10'){last;};
    }

    # closes the workdir at end of the main loop
    closedir(DIR);
    
    return (\@dirs);
    
    # --> DEBUG:  close early
    # exit;
}



Im Hauptprogramm schaut es momentan so aus, aber das ist auch nur irgendeine Variante mit Backslash, @ oder $-Zeichen, die ich ausprobierte. Egal was ich mache, ich kriege immer nur die Anzahl der Listenelemente zurück, aber nicht die Werte selbst.

Code (perl): (dl )
1
2
my $changed_dirs = identify_changed_dirs;
print "Changed Directories: ". @$changed_dirs ."\n";



Irgendwie habe ich mich verzettelt. Könnt ihr mir bitte einen Tipp geben ?


Vielen Dank und gute Nacht,
Marcus

View full thread Wie kriege ich meinen Array aus der Funktion wieder raus ?