When split is not used in list context, it splits into @_ and returns the number of elements.
-sauoq
"My two cents aren't worth a dime.";
| [reply] |
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." | [reply] [d/l] [select] |
The split is done in scalar context ($_ is scalar and sets the context) so the assignment is counting the number of pieces you get, one more than the number of &'s. The following line executes blah.pl using backticks to collect the text output of the script and print it after a paragraph tag.
You should toss this and start over. You are handrolling a cgi query parser when you should use CGI;. It will do a much better job.
After Compline, Zaxo
| [reply] |
split returns the count of substrings that it
found. | [reply] [d/l] |