Unique local varible for each coroutine instance

I have a coroutine that moves box in a Bezier curves. float curveMovementTParam is currently a local variable in a script. If I run the same coroutine multiple time, then each coroutine instance will affect curveMovementTParam.

How do I give each coroutine a unique variable for itself only?

private IEnumerator MoveBoxInCurve(Transform shapesPos, float speedModifier)
{
	Vector2 p0 = Aroute.GetChild(0).position;
	Vector2 p1 = Aroute.GetChild(1).position;
	Vector2 p2 = Aroute.GetChild(2).position;
	Vector2 p3 = Aroute.GetChild(3).position;
	Vector2 objectPosition;
	while (curveMovementTParam < 1)
	{
		curveMovementTParam += Time.deltaTime * speedModifier;
		objectPosition = Mathf.Pow(1 - curveMovementTParam, 3) * p0 + 3 * Mathf.Pow(1 - curveMovementTParam, 2) * curveMovementTParam * p1 + 3 * (1 - curveMovementTParam) * Mathf.Pow(curveMovementTParam, 2) * p2 + Mathf.Pow(curveMovementTParam, 3) * p3;
		shapesPos.position = objectPosition;
		yield return new WaitForEndOfFrame();
	}
	curveMovementTParam = 0f;
}

Can’t you create a variable in the couroutine to take the value of your parameter ?
So this varaible will be modified and not your instance parameter.

...
	Vector2 objectPosition;
float curveMovement = curveMovementTParam;
	while (curveMovement < 1)
...