Re: [PATCH 13/16] send-email: extract_valid_address use qr// regexes and /o
- From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- Date
- Sep 30, 2010, 18:56 UTC
- Message-ID
- <AANLkTin_b6eSnHgY2YCOfN7E83gEzrOpktUD3heOnfQw@mail.gmail.com>
- In-Reply-To
- <7vocbfjg7x.fsf@alter.siamese.dyndns.org>
On Thu, Sep 30, 2010 at 17:25, Junio C Hamano <gitster@pobox.com> wrote:
Show 15 quoted lines
> Jeff King <peff@peff.net> writes: > >> ... >> But we are unnecessarily compiling the sub-regexes each time. Not that >> this is probably a performance critical piece of code, but your "/o" is >> doing very little, and this is exactly the sort perl wankery that I find >> interesting. > > Well, isn't the _sole_ point of using qr// to optimize by avoiding > recompilation? If this is not a performance critical section of the code, > what is the point of this change? > > This [PATCH 13/16] and also [PATCH 12/16] rewrite strings using qr// but > the patterns thus compiled are used exactly once before the control leaves > the scope of the variables, so...
The point is to use Perl's data-types for what they're supposed to be used for. In perl you *can* write:
my $two = "1" + "1";
To get 2, but that's silly. You should just use integers instead of string coercion:
my $two = 1 + 1;
Similarly you *can* put regexes in strings, but perl has a first-class datatype for it, so you should do:
my $rx = qr/foo/;
Not:
my $rx = "foo";
So it's just a change to use a better style. There are some tangible advantages to using qr// over qq// (also known as ""), e.g. Emacs and Vim will know to highlight the string as a regexp, and when the $rx is interpolated Perl won't need to recompile it because it can just add a pointer to the existing regex in the new pattern.
But the main reason here is to not write code that looks like it targets Perl 5.5, but 5.8.