in reply to Perl / Apache / P4 Problem

Never used P4, but how I'd approach the problem (after doing everything you said you're doing) is to insert some logging statements into the code to ensure that $CL is set properly, for example. One popular log module is Log::Log4Perl, although I find it quite heavy. Regardless, what you want to do is show what $CL is right after the shift, show what @options is, right after the push, $errors right before the die, and @info right before the foreach.

Debugging tips aside, "$Components = $Components.$element" is easier said as "$Components .= $element". However, the entire foreach statement is easier said as "$Components = join '', @info". (I'm assuming $Components starts out empty - if that's not the case, change the = to .=)

Also, I'm not sure why you're clearing out @options - usually @options would not be global, so it would get cleared at the end of the routine anyway. But that's really not that important. Just that if it's not needed, it's clutter. Same for @info.