Oof, this is ugly code. What it is doing is performing a split on an ampersand,
but, it is calling split in scalar context, which returns the number of items resulting, not the items themselves. Then, it puts that into $_ to confuse matters.
Therefore, when it checks $_ later on, it is checking if there were 3 &'s (because that would split into 4 elements).
I personally would have used a meaningful variable name there (like $num_clauses or such) to clarify.
Hope this helps,
Update: As pointed out, split in scalar context has the side effect of populating @_, you should look out for use of this further on in the code. Once again, you can make this explicit and meaningful using something like:
my @elements=split(...);
my $num_elements = @elements;
or just do a scalar test on @elements later on:
if (@elements == 4) {
-pete
"Worry is like a rocking chair. It gives you something to do, but it doesn't get you anywhere."