Thread Package: libtimedate-perl use File::stat; "use" not allowed in expression at (16 answers)
Opened by hcx at 2011-07-12 17:27

Linuxer
 2011-07-12 20:39
#150332 #150332
User since
2006-01-27
3891 Artikel
HausmeisterIn

user image
Hi, ich hab mir Dein Skript nochmal genauer angesehen und hätte noch ein paar Anmerkungen:
  • Den Kommentar, was das Skript tut, würde ich vor alle use Aufrufe setzen; so bleibt das ein zusammenhängender Block
  • Konfigurierbare Parameter würde ich direkt hinter den use Block setzen.
  • Das Alter (hier 30 Tage) würde ich ebenso konfigurierbar machen und nicht hart in den Code schreiben
  • Ich würde die 3-Argument-Form des open() verwenden
  • Ich würde den Pfad zur Log-Datei OHNE Umleitungszeichen in eine Variable legen; ansonsten kommt es nur zu Verwirrung (und das scheint schon passiert zu sein)

Hier mal (m)eine Überarbeitung Deines Skriptes:


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
60
61
62
63
64
65
66
67
68
69
70
#! /usr/bin/perl

# Skript, das Dateien in einem zu definierenden Ordner loescht,
# wenn die Datei ein zu definierendes Alter ueberschritten hat
#
# Hier: Loesche die mailbox Dateien aus /tmp/mail, wenn sie aelter
# als 30 Tage sind

use strict;
use warnings;
use File::Spec;

### globale Variablen
#####################################################################

my $check_dir = "/tmp/mail";
my $max_age   = 30;

my $log_dir = '/tmp/logdir';
my $log_file = 'logfile.txt';

my $log_path = File::Spec->join( $log_dir, $log_file );

### Sub Routinen
#####################################################################

sub read_dir {
        my $dir = shift;

        return ()       if !defined $dir;

        opendir my $dh, $dir or die "$dir: $!\n";
        my @entries = 
          # Kriterien koennen sich aendern, daher in einzelnen Schritten
          grep { -f $_ }                                # nur Dateien
            map { File::Spec->join( $dir, $_ ) }        # baue Pfad zusammen
                  grep { !m{\A\.\.?\z} }                # kein . oder ..
                    readdir $dh;

        closedir $dh;

        return @entries;
}


### Haupt Programm
#####################################################################

my @to_check = read_dir( $check_dir );

open my $logh, '>>', $log_path or die "$log_path: $!\n";

for my $entry ( @to_check ) {
        if ( -M $entry > $max_age ) {
                print $logh "$entry ist aelter als $max_age Tage.\n"
                  or die "$log_path: $!\n";
                if ( unlink $entry ) {
                        print $logh "\t$entry geloescht.\n";
                }
                else {
                        die "$entry: $!\n";
                }
        }
}

close $logh or die "$log_path: $!\n";


__END__
### ENDE ###

Last edited: 2011-07-12 20:48:09 +0200 (CEST)
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Package: libtimedate-perl use File::stat; "use" not allowed in expression at