The regular expression finds all occurances of ATG, followed by a set of zero or more codons (I assume we're working with DNA) matched in a non-greedy manner (i.e. as few as possible), followed by TAA,TAG,or TGA. For each match, it makes $start equal to the length of the portion matched by the regex. Make sense?
P.S. the /o modifier is not necessary.
P.P.S perldoc perlre
perldoc perlvar
Update
I'm late. I hate it when that happens.