#!/usr/bin/perl -w use strict; use warnings; my %test = ( 1 => { von => '02.05.2011', bis => '30.06.2011', soll => 58, }, 2 => { von => '02.05.2011', bis => '30.07.2011', soll => 88, }, 3 => { von => '02.05.2011', bis => '30.01.2012', soll => 268, }, 4 => { von => '02.05.2011', bis => '30.07.2012', soll => 448, }, 5 => { von => '02.05.2011', bis => '28.05.2011', soll => 26, }, 6 => { von => '02.05.2011', bis => '01.04.2011', soll => -31, }, ); foreach my $lfdnr (sort {$a <=> $b} keys %test) { my %callback = ( von => $test{$lfdnr}{von}, bis => $test{$lfdnr}{bis}, ); zinstage(\%callback); print "$lfdnr - $test{$lfdnr}{von} - $test{$lfdnr}{bis} soll $test{$lfdnr}{soll}: $callback{tage} ".($callback{tage} == $test{$lfdnr}{soll} ? 'OK' : 'FEHLER!'.chr(7))."\n"; } ############################ sub zinstage { my ($callback) = @_; my @von = split /\./,$callback->{von}; my @bis = split /\./,$callback->{bis}; $von[0] = 30 if $von[0] > 30; $bis[0] = 30 if $bis[0] > 30; $callback->{tage} = 30 - $von[0] + $bis[0]; if ($von[1] + 1 != $bis[1]) { $callback->{tage} += ($bis[1] - $von[1] - 1) * 30; } if ($bis[2] > $von[2]) { $callback->{tage} += ($bis[2] - $von[2]) * 360; } }