Regularly spaced holes in a cylinder
Being a huge fan of modifiers, I've tried this solution here, which keeps the modelling geometry as simple as possible (I guess). You can see the results here in this Blend file:

There are two layers, I've experimented a bit with the topology of the base mesh to reduce shading artefacts. Unfortunately, they cannot be avoided completely.
Procedure
You can start off with laying down the polygons highlighted in this screenshot:

A rather elaborate modifier stack will then turn this into the pipe geometry you're looking for. I won't explain all of them as you have the Blend file too, but I'll talk a bit about the first Array.

The thing is, here I'm using the object offset option. The Array I defined basically rotates the mesh around the empty by 180 degrees. The merge option is turned on in all three arrays, and the limit set to 1mm in my case, to make sure the neighboring points are merged together.

Now that you have the alternating geometry in place, you can use simple arrays to get a flat base mesh. A simple deform modifier bends that into a pipe shape, and the rest (solidify, bevel, subsurf) is optional.

You'll notice that a seam is going through at the ends. That's because there unfortunately is no merge option in the simple deform modifier, neither is there a remove doubles modifier. I wish there was so badly! If you have to remove the seam, apply the first three arrays and the deformer, and then remove doubles.
You'll notice shading artefacts as pointed out in the beginning. Using the geometry below, those artifacts become less apparent, as they happen in a more logical place:

This is a wireframe on that final result (Layer 2 in the Blend file):