#!/usr/bin/perl

$param = shift;

if ($param eq "") {
	$string = "chaine de caractères quelconque avec deux nombres 12345 et 4567\n";
	# valeur par défaut, qui met en lumière les substitutions définies plus bas
} else {
	$string = "$param\n";
}



$_ = $string;
# pour simplifier l'écriture :
# sinon, il faudrait chaque fois écrire "$string =~ s///;"
print "Chaine de départ : \n\t";
print ;
print "\n";

# constitution d'un vecteur contenant des définitions de paramètres de substitutions,
# qui seront utilisées dans le foreach 
# une définition par élément (= ligne ici)
# les paramètres d'une définition sont séparés par des TAB,
@substitutions = (
"a	A",
"a	A	g",
"[0-9]	CHIFFRE",
"[0-9]+	NOMBRE",
"([0-9]+)	NOMBRE = \$1",
".*([0-9]+).*	NOMBRE = \$1",
"[^0-9]*([0-9]+).*	NOMBRE = \$1",
"[^0-9]*([0-9]+)[^0-9]*	NOMBRE = \$1\\n\\t	g"
);

foreach $substitution (@substitutions) {
# pour chaque définition $substitution, dans un élément du vecteur @substitutions
# ici on a pris explicitement la variable $substitution, au lieu de la laisser anonyme '$_'
# d'autant plus que plus bas on redéfinit  '$_' avec un autre contenu : le $string traité
	($cherche, $remplace, $option) = split(/\t/, $substitution);
	# extraire les paramètres de la définition
	print "Effet de s/$cherche/$remplace/$option : \n\t";
	# afficher l'opération
	$_ = $string;
	# à nouveau pour simplifier l'écriture :
	# sinon, il faudrait chaque fois écrire "$string =~ s///;"
	$remplace =~ s/\$1//;
	if ($option eq "g") {
		if ($remplace =~ s/\\n//) {
			$remplace =~ s/\\n//;
			$remplace =~ s/\\t//;
			s/$cherche/$remplace$1\n\t/g;
		} else {
			s/$cherche/$remplace$1/g;
		}
	} else {
		s/$cherche/$remplace$1/;
	}
	print "$_\n";

}

exit;


