Thread Wie kriege ich meinen Array aus der Funktion wieder raus ?
(9 answers)
Opened by mzurhorst at 2012-04-12 00:13
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 |