
use strict;




my $MaxRawDataToProcess	= 90 * 1024;								# long int - anzahl der bytes die verarbeitet werden sollen
$MaxRawDataToProcess	= sprintf("%.0f", $MaxRawDataToProcess);	# Immer aufrunden
my $Content;


open(RH,"<phexdump.txt") or die;
	flock(RH, 2);
		{ 	local $/ = undef;		# Read entire file at once into one string
			$Content = <RH>;		# Return file as one single `line'
        };  
close RH;


my $ContentScalarRef = &IntelligentRawDataCut( \$Content, $MaxRawDataToProcess);

# debug
open(WH,">cutted.txt");
	print WH ${$ContentScalarRef};
close WH;


sub IntelligentRawDataCut(){

	####
	## Intelligentes Beschneiden des Phex Contents - es wird so abgeschnitten, dass ein Ergebnis intakt bleibt an der zu cuttenen Stelle
	####

	my $FileContentRef		= shift;						# string Scalar ref
	my $MaxRawDataToProcess	= shift;						# long int
	
	my $FileContent			= ${$FileContentRef};			# greife mittels zeiger auf den inhalt hinter der referenz $FileContentRef zurück
	my $FileContentLength	= 0;							# long int
	my $FileContentLength	= length($FileContent);			# long  int
	my @SplittedContent		= ();							# array prototyp
	my $SplittedContent		= "";							# string

	if ( $MaxRawDataToProcess >= $FileContentLength ) {		# MaxDataToProcess ist größer als PhexContent - wir brauchen den datenstrom nicht abschneiden
		
		# print "DEBUG: No need to cut\n";
		return \$FileContent;								# Referenz auf String zurückgeben

	} elsif ( $FileContentLength > $MaxRawDataToProcess ) { # MaxDataToProcess ist kleiner als PhexContent - wir sollen den datenstrom abschneiden 
	
		(@SplittedContent)	= split("", $FileContent);		# Ein Array mit allen Zeihen des FileContent füllen

		for (my $i=$MaxRawDataToProcess; $i<=$FileContentLength; $i++ ) {
			
			my $SingleString		= $SplittedContent[$i];
			my $SingleStringNext	= $SplittedContent[$i+1];
			
			if ( $SingleString eq "\\" && $SingleStringNext eq "n" ) {
				
				my $IntelligentCutAtBytePosition = $i + 2;	# aktuelle position plus 2 zeichen '\n'
				$FileContent = substr($FileContent, 0, $IntelligentCutAtBytePosition);	# Intelligent Cut

				# print "DEBUG: I cutted at $IntelligentCutAtBytePosition instead of $MaxRawDataToProcess \n";
				return \$FileContent;

			}; # if ( $SingleString eq "\\" && $SingleStringNext eq "n" ) {

		}; # for (my $i=$MaxRawDataToProcess; $i<=$FileContentLength; $i++ ) {
	
	}; # if ( $FileContentLength <= $MaxRawDataToProcess ) {

	return \$FileContent;	# never reached

}; # sub IntelligentRawDataCut(){





