Thread Syntaxcheck sub in hash
(12 answers)
Opened by bianca at 2010-10-24 10:48 2010-10-24T11:29:54 renee Das use an den Anfang der sub, ist das besser? Dann müsste es zur Compile-Zeit immer erreicht werden oder? Danke 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 71 72 73 74 75 76 77 78 79 80 81 82 83 #!/usr/bin/perl -w use strict; use warnings; use diagnostics; my %env; add_ausfuehrungsrhythmen (\%env); foreach my $datum ( '29.02.2008', # Test Schaltjahr '01.01.2010', # Extremwert '31.01.2010', # wg. Februar '31.12.2010', # Extremwert ) { print "\nDatum '$datum':\n"; foreach my $rhythmus ( sort {$env{ausfuehrungsrhythmus}{$a}{reihe} <=> $env{ausfuehrungsrhythmus}{$b}{reihe}} keys %{$env{ausfuehrungsrhythmus}} ) { print "Berechne '" . $env{ausfuehrungsrhythmus}{$rhythmus}{anzeige} . "' => " . $env{ausfuehrungsrhythmus}{$rhythmus}{berechnung} -> ($datum) . "\n" } } sub add_ausfuehrungsrhythmen { # # Fügt dem laufenden Hash %env alle Ausführungsrhythmen hinzu # # Aufruf: # ======= # add_ausfuehrungsrhythmen (\%env); # # - Zweite Dimension ist das dreistellige Kürzel für den Rhythmus # - Reihenfolge der Definition bestimmt die Anzeige für den User # my ($env) = @_; use Date::Calc qw ( check_date ); $env -> {ausfuehrungsrhythmus}{mtl} = { anzeige => 'Monatlich', reihe => (keys %{$env{ausfuehrungsrhythmus}}) + 1, berechnung => sub { my @wert = reverse (split /\./,shift); $wert[1] ++; # garantiert jeden Monat treffen, Add_Delta_YMD würde beim 31.01. den Februar überspringen if ($wert[1] > 12) { # Monatsüberlauf $wert[1] = 1; $wert[0] ++; } $wert[2] -- while !check_date (@wert); # Tag korrigieren, falls Monat kürzer als vorheriger return sprintf ('%02u.%02u.%04u', reverse @wert); }, }; $env -> {ausfuehrungsrhythmus}{qua} = { anzeige => 'Quartalsweise', reihe => (keys %{$env{ausfuehrungsrhythmus}}) + 1, berechnung => sub { my @wert = reverse (split /\./,shift); $wert[1] += 3; if ($wert[1] > 12) { $wert[1] = $wert[1] - 12; $wert[0] ++; } $wert[2] -- while !check_date (@wert); # Tag korrigieren, falls Monat kürzer als vorheriger (z.B. bei Schaltjahr 29.02.2008) return sprintf ('%02u.%02u.%04u', reverse @wert); }, }; $env -> {ausfuehrungsrhythmus}{jhr} = { anzeige => 'Jährlich', reihe => (keys %{$env{ausfuehrungsrhythmus}}) + 1, berechnung => sub { my @wert = reverse (split /\./,shift); $wert[0] ++; $wert[2] -- while !check_date (@wert); # Tag korrigieren, falls Monat kürzer als vorheriger (z.B. bei Schaltjahr 29.02.2008) return sprintf ('%02u.%02u.%04u', reverse @wert); }, }; } Edit: Aktueller code Last edited: 2010-10-24 14:15:06 +0200 (CEST) 10 print "Hallo"
20 goto 10 |