#!/usr/bin/perl use warnings; use strict; sub calcdiff { my $old = shift; my $new = shift; if ($new > $old) { my $ergebniss_1 = ($new - $old); return($ergebniss_1); } elsif ($old > $new) { my $ergebniss_2 = ($old - $new); return ($ergebniss_2); } } my @order; open(INFILE, "test.txt"); while( my $line = ){ if ( $line =~ m/^(.+):\s+\/.+:$/) { push @order, [$1."\n"]; } elsif ( $line =~ m/(^\d+)\s+(.+)\s+(.)\s+(\d+)\s+(.+)\s+$/ ) { if ($3 eq "\|") { push @{ $order[-1] },"\t$2\t$1\t$4\t" . "Diff: " . &calcdiff("$1","$4") . "\n"; } elsif ($3 eq "\<") { push @{ $order[-1] }, "\tNew File:\t$5\tSize: $4\n"; } elsif ($3 eq "\>") { push @{ $order[-1] },"\tFile deleted:\t$5\n"; } } } for( @order ){ next if @$_ == 1; print $_ for @$_; }