Guideline RP3: Do not repeat isomorphic code fragments
Taking the idea of duplicate code from identical fragments, consider the issue of code fragments which are isomorphic (i.e. containing similar--though than identical--code, yet mirroring each other in function). Just as described for identical fragments, if there is a sequence of statements which you can point to and say that they perform a particular task, put that sequence into a separate function that you parameterize for any differences. If, for example, you have one function with statements A, B, C, D=x+5, E, F and a second with A, B, C, D=x+10, E, F, then parameterize the function f(param) so that statement D becomes D=x+param, making the sequences truly identical. The example below provides a strong case for even a single line code fragment to be encapsulated.
	# print at most first 3 elements of array @a, separated by commas...
	print join(",", (@a)[0..min(2,$#a)], ($#a > 2 ? "..." : ()));
	# ... but store it with virgule separators
	$data = join("/", (@a)[0..min(2,$#a)], ($#a > 2 ? "..." : ()));
	sub abbrJoin {
		my $sep = shift;
		return join($sep, (@_)[0..min(2,$#_)], ($#_ > 2 ? "..." : ()));
	}
	print abbrJoin("," @a);
	$data = abbrJoin("/", @a);