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; }
1 2
my $changed_dirs = identify_changed_dirs; print "Changed Directories: ". @$changed_dirs ."\n";
2012-04-11T22:13:59 mzurhorstAm Ende habe ich da innen drin in meinem Array eine Liste mit Verzeichnisnamen drin, die sich verändert haben auf meiner Festplatte.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#!/usr/bin/perl use warnings; use strict; my @b = myfunc(); foreach my $i (@b) { print "$i\n"; } sub myfunc { my @a = (1, 2, 3, 4); return @a; }
use feature 'say';
say for @changed_dirs;
2012-04-11T22:49:05 hlubenowWenn das ein Array von Array ist, mußt Du tatsächlich eine Referenz darauf zurückgeben.
Wenn es aber nur eine einfache Liste mit ein paar Verzeichnisnamen ist, kannst Du's auch "einfach so" zurückgeben:
2012-04-12T08:06:48 pq2012-04-11T22:49:05 hlubenowWenn das ein Array von Array ist, mußt Du tatsächlich eine Referenz darauf zurückgeben.
Wenn es aber nur eine einfache Liste mit ein paar Verzeichnisnamen ist, kannst Du's auch "einfach so" zurückgeben:
das ist ja hier nicht das problem und macht auch keinen unterschied. die ausgabe per "" . @array . "" wird auch da nicht das gewünschte bringen. nur als kommentar.
return (\@dirs);
return @dirs;
1 2 3 4 5
my @changed_dirs = identify_changed_dirs(); print "Changed Directories:\n"; foreach my $i (@changed_dirs) { print "$i\n"; }
my @dirs = ();