Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Re^2: Any downsides to this slurp idiom?

by vr (Curate)
on Jun 22, 2018 at 17:55 UTC ( #1217237=note: print w/replies, xml ) Need Help??


in reply to Re: Any downsides to this slurp idiom?
in thread Any downsides to this slurp idiom?

That's for 5.18 and older versions of Perl. Perhaps related somehow to COW becoming default in 5.20, same mechanism of optimization.

  • Comment on Re^2: Any downsides to this slurp idiom?

Replies are listed 'Best First'.
Re^3: Any downsides to this slurp idiom?
by Your Mother (Archbishop) on Jun 22, 2018 at 18:22 UTC

    I'm sorry to ask but I'm interested and not sure I follow. Are you saying that BrowserUk's two examples are equivalent in the background with 5.20 and up? Copy on write being used to make the "temporary" data the same as the scalar's?

      Correct. I'm observing, right now, memory consumption reading 400 MB file using both examples, both in 5.18 and 5.20. And trying to read 800 MB file results in "Out of memory!" (32-bit OS) with 5.18 and $s = do{...}; syntax, but not in other 3 cases. I said "somehow" because scalar doesn't get "IsCOW" flag, but mechanism (do not copy a buffer PV points to) must perhaps be the same.

Re^3: Any downsides to this slurp idiom?
by BrowserUk (Pope) on Jun 22, 2018 at 20:46 UTC

    That sounded plausible, but I just tried it on 5.22 with these results, using this code in my repl:

    { my $s; do{ local( @ARGV, $/)='1gb.db'; $s = <> }; <STDIN>; my $t = do{ local( @ARGV, $/)='1gb.db'; <> }; <STDIN> };;

    Note how the first bump in the memory to 1.2GB remains at that level after the first burst of IO finishes,

    It then climbs to 2.4GB for the second burst of IO, and then climbs again to 3.5GB immediately the IO stops.

    Ie. When the temporary buffer within the do block is copied into the target scaler $t.

    (Perhaps the IsCOW only operates on *nix? (I'm on win.)


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority". The enemy of (IT) success is complexity.
    In the absence of evidence, opinion is indistinguishable from prejudice. Suck that fhit
      >perl -wE "system(qq($^X -v));my$s=do{local(@ARGV,$/)='1GB';<>};system +('typeperf """\\Process(perl)\\Working Set Peak""" -sc 1')" This is perl 5, version 18, subversion 4 (v5.18.4) built for MSWin32-x +64-multi-thread Copyright 1987-2013, Larry Wall Perl may be copied only under the terms of either the Artistic License + or the GNU General Public License, which may be found in the Perl 5 source ki +t. Complete documentation for Perl, including FAQ lists, should be found +on this system using "man perl" or "perldoc perl". If you have access to + the Internet, point your browser at http://www.perl.org/, the Perl Home Pa +ge. "(PDH-CSV 4.0)","\\DESKTOP-P81QO3Q\Process(perl)\Working Set Peak" "06/23/2018 01:47:53.431","2192527360.000000"

      .

      >perl -wE "system(qq($^X -v));my$s=do{local(@ARGV,$/)='1GB';<>};system +('typeperf """\\Process(perl)\\Working Set Peak""" -sc 1')" This is perl 5, version 22, subversion 3 (v5.22.3) built for MSWin32-x +64-multi-thread Copyright 1987-2017, Larry Wall Perl may be copied only under the terms of either the Artistic License + or the GNU General Public License, which may be found in the Perl 5 source ki +t. Complete documentation for Perl, including FAQ lists, should be found +on this system using "man perl" or "perldoc perl". If you have access to + the Internet, point your browser at http://www.perl.org/, the Perl Home Pa +ge. "(PDH-CSV 4.0)","\\DESKTOP-P81QO3Q\Process(perl)\Working Set Peak" "06/23/2018 01:58:33.467","1099583488.000000"

        Okay. I have now reproduced your results with 5.22:

        C:\test>\perl22\bin\perl -e"my$s=do{local(@ARGV,$/)='1gb.db';<>}; prin +t `tasklist /nh /fi \"PID eq $$\"`;" perl.exe 2948 Console 1 1,218 +,828 K

        But not from my repl. It has a variety of things preloaded:

        C:\test>\perl22\bin\perl.exe \perl22\bin\p1.pl [0]{} Perl> print for keys %INC;; Time/HiRes.pm Exporter/Heavy.pm Benchmark.pm Config_heavy.pl overload.pm vars.pm threads/shared.pm Config.pm List/Util.pm warnings.pm warnings/register.pm XSLoader.pm feature.pm DynaLoader.pm strict.pm Data/Dump.pm ActivePerl/Config.pm Scalar/Util.pm C:/Perl22/site/lib/sitecustomize.pl Carp.pm Config_git.pl subs.pm Exporter.pm threads.pm overloading.pm [0]{} Perl>

        One or more of which appear to interfere with this feature, which doesn't bode well. I'll investigate further sometime.


        With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority". The enemy of (IT) success is complexity.
        In the absence of evidence, opinion is indistinguishable from prejudice. Suck that fhit

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others browsing the Monastery: (3)
As of 2021-10-24 10:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My first memorable Perl project was:







    Results (89 votes). Check out past polls.

    Notices?