in reply to Using s///e and it just doesn't feel right

You can change it into a loop:
while($content =~ /id=(\d+)/sig){ push(@disp, $1); }
I think in standard code I would prefere the loop - while the s///e is great for golfing.

Update: Yeah diotalevi has a better solution using the fact that a match in list context returns a list of matches.