#!/usr/bin/perl

$myself = $0;
($file, $search, $replace, @rest) = @ARGV;
if($file eq "-h" or $file eq "-help" or $file eq "--help" or $replace!~/\S/){
	println("usage: $myself <file> <search> <replace> [case] [regex]");
	println("- replaces all occurrences of 'search' in 'file' and replaces it by 'replace'");
	println("- default is case insensitive, unless you specify 'case'");
	println("- default is searching 'as-is', unless you specify 'regex'");
	exit 0;
}

$regex = "";
$case = "";
foreach $word(@rest){
	$case = "case" if($word eq "case");
	$regex = "regex" if($word eq "regex");
}

# read $file
open(F, "<$file") or printAndDie("ERROR: cannot read $file: $!");
while(<F>){
	chomp($_);
	$line = $_;
	if($regex eq "regex"){ # regex
		if($case eq "case"){ # case sensitive
			$line =~ s/$search/$replace/g;
		} else { # case insensitive
			$line =~ s/$search/$replace/gi;
		}
	} else { # as-is
		if($case eq "case"){ # case sensitive
			$line =~ s/$search/$replace/g if(index($line, $search)>=0);
		} else { # case insensitive
			$line =~ s/$search/$replace/gi if(index(lc($line), lc($search))>=0);
		}
	}
	$code .= $line ."\n";
}
close(F);

# write $file
open(F, ">$file") or printAndDie("ERROR: cannot write $file: $!");
print F $code;
close(F);

# finish
println("DONE - check file $file");


### functions ###
sub printAndDie{
	my $msg = shift;
	println($msg);
	exit 1;
}
sub println{
	my $msg = shift;
	print $msg ."\n";
}

