Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Re^5: Can we make $& better? (need)

by demerphq (Chancellor)
on Sep 12, 2007 at 19:24 UTC ( #638654=note: print w/ replies, xml ) Need Help??

in reply to Re^4: Can we make $& better? (need)
in thread Can we make $& better?

Hrm, ill have to check the code in more detail, however I'm pretty sure that /g in list context copies the string *once*, wheras /g in scalar context doesn't copy it at all. The latter I know because i "fixed" it in 5.9.5 and then had to back out the fix because it caused an unacceptable slowdown.

However as far as I know you were correct, using capturing parens will cause a copy of the full string. Ill try to follow up with more details from the code when I have more time.


Comment on Re^5: Can we make $& better? (need)
Re^6: Can we make $& better? (need)
by tye (Cardinal) on Sep 12, 2007 at 20:49 UTC

    BTW, my test was to change the string used in the match and then see if $1 also changed. That isn't a perfect test because it might be that the string is copied but $1 doesn't correctly use the copy made, for example. Here is a more polished version and two sets of results:

    #!/usr/bin/perl -w use strict; print "$] $^O\n"; for( qw( s l sg lg ) ) { my $x= "-y1-y2-"; my @y; $y[0]= $x =~ /(.\d)/ if 's' eq $_; @y= $x =~ /(.\d)/ if 'l' eq $_; $y[0]= $x =~ /(.\d)/g if 'sg' eq $_; @y= $x =~ /(.\d)/g if 'lg' eq $_; $x= ":1n:2n:"; print "$_ ($1)\n"; } __END__ 5.006 MSWin32 s (y1) l (1n) sg (1n) lg (2n) 5.008008 MSWin32 s (y1) l (y1) sg (1n) lg (2n)

    Which shows I'd missed the only "will copy" case in 5.6.

    - tye        

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://638654]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (3)
As of 2014-10-02 02:26 GMT
Find Nodes?
    Voting Booth?

    What is your favourite meta-syntactic variable name?

    Results (43 votes), past polls