Front page | perl.perl5.porters |
Postings from June 2001
[DOC PATCH bleadperl] Document $count = () = $string =~ /\d+/g
Thread Next
From:
Philip Newton
Date:
June 26, 2001 07:06
Subject:
[DOC PATCH bleadperl] Document $count = () = $string =~ /\d+/g
Message ID:
3B38B2FF.16228.1D62F38@localhost
The "empty brackets" idiom appears not to be documented,
so I decided to throw together a little patch to put into perldata.
(This also adds a "when" earlier on which I think sounds better
and makes the first sentence of the next paragraph a little
more verbose to help provide context after the sidetrack.)
--- pod/perldata.pod.orig Sat Jun 2 18:11:11 2001
+++ pod/perldata.pod Tue Jun 26 13:56:30 2001
@@ -565,7 +565,7 @@
array had been interpolated at that point.
This interpolation combines with the facts that the opening
-and closing parentheses are optional (except necessary for
+and closing parentheses are optional (except when necessary for
precedence) and lists may end with an optional comma to mean that
multiple commas within lists are legal syntax. The list C<1,,3> is a
concatenation of two lists, C<1,> and C<3>, the first of which ends
@@ -611,7 +611,27 @@
context, because most list functions return a null list when finished,
which when assigned produces a 0, which is interpreted as FALSE.
-The final element may be an array or a hash:
+It's also the source of a useful idiom for executing a function or
+performing an operation in list context and then counting the number of
+return values, by assigning to an empty list and then using that
+assignment in scalar context. For example, this code:
+
+ $count = () = $string =~ /\d+/g;
+
+will place into $count the number of digit groups found in $string.
+This happens because the pattern match is in list context (since it
+is being assigned to the empty list), and will therefore return a list
+of all matching parts of the string. The list assignment in scalar
+context will translate that into the number of elements (here, the
+number of times the pattern matched) and assign that to $count. Note
+that simply using
+
+ $count = $string =~ /\d+/g;
+
+would not have worked, since a pattern match in scalar context will
+only return true or false, rather than a count of matches.
+
+The final element of a list assignment may be an array or a hash:
($a, $b, @rest) = split;
my($a, $b, %rest) = @_;
End of patch.
Comments are welcome.
Cheers,
Philip
--
Philip Newton <pnewton@gmx.de>
I appreciate copies of replies to my messages to Perl5 lists.
Thread Next
-
[DOC PATCH bleadperl] Document $count = () = $string =~ /\d+/g
by Philip Newton