Sequence of execution in a co routine

I just recently came across the concept of a co routine. I just have a small question. In the following code what is the order of execution and where and how is the control of the program transferred ? Will it, by any chance be like this:
The canTripleShot =true
The co routine begins. As it has a 5sec delay the next instruction i.e Destroy(col.gameObject) will be executed and then after 5 sec the co routine will be executed (cantripleShot=false).

So I simplified your code to this:

void OnTriggerEnter2D(Collider2D col)
{
       tripleShot = true;
       StartCoroutine(TripleShot());
      Destroy(col.gameObject);
}
IEnumerator TripleShot(){
      yield return new WaitForSeconds(5f);
      tripleShot = false;
}

So first the collision method is called and tripleShot is true. The coroutine starts and hits the yield.
It actually starts a new coroutine.

System gets back to collision method and destroys the collision object. This is the end of the collision method.

For the next 5s, the system will get back to that last coroutine to check if the time is passed and return.
After 5s, the WaitForSeconds coroutine returns and TripleShot moves on to set tripleShot to false.

One issue you may have (and maybe you want that to be actually), if you hit a new object during the 5s, you trigger a new coroutine.

Now you have 2 coroutines running aside and when the first one runs out of time, it will set tripleShot to false though the second is not over.

If this is not what you want then you need to figure out a way to fix it:

int count = 0; 
void OnTriggerEnter2D(Collider2D col)
{
       tripleShot = true;
       StartCoroutine(TripleShot());
      Destroy(col.gameObject);
}
IEnumerator TripleShot(){
      count++;
      yield return new WaitForSeconds(5f);
      count--;
      tripleShot = (count > 0);
}

Now you have a count index, you increase it on start of coroutine and decrease after the timer. Then you check if count is greater than 0, meaning you still have a coroutine running. If so, tripleShot remains true. If you ran out of coroutine, count is 0, tripleShot is set to false.

if(canTripleShot){
StartCoroutine(TripleShotPowerDown());
} else {
StopCoroutine(TripleShotPowerDown());
}

IEnumerator TripleShotPowerDown(){
   yield return new WaitForSeconds(5.0f); //wait for 5 seconds
   //Destroy(col.gameObject);
   yield return new WaitForSeconds(5.0f); // wait again for 5 seconds
   canTripleShot = false;
}

I’m not pretty sure if I understand your question fully. But you want to execute the TripleShotPowerDown() when the canTripleShot = true right? then destroy and wait for 5 seconds again right? . Anyway hope it helps