Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re^2: 3-byte representation

by BrowserUk (Pope)
on Oct 12, 2011 at 19:12 UTC ( #931071=note: print w/replies, xml ) Need Help??

in reply to Re: 3-byte representation
in thread 3-byte representation

Update: The >> 8 got dropped when I posted my solution. Fixed.

Silently becomes

Update: The /256 got dropped when I posted my solution. Fixed.

Hm. "Got dropped" huh!

Replies are listed 'Best First'.
Re^3: 3-byte representation
by Anonymous Monk on Oct 13, 2011 at 10:48 UTC
    Thank you for all your gentle answers, but if I run this:
    #!/usr/bin/perl print "Content-type: text/html\n\n"; srand(); $fil="ch"; open(OUT, '>>'.$fil); for($i=1;$i<10001;$i++){ $j=int(rand(20000))+440000; $k=substr(pack('l>',$j),1); print OUT $k; } close(OUT); print "DONE !";
    it produces one file with a variable length, but always greater than 30000 characters (for exemple 30045) ! So I suppose something is wrong in the pack line coding...

      Add binmode OUT after the open.


      1. you should be using a mode of '>' not '>>', unless your intention is to append to an existing file.
      2. for($i=1;$i<10001;$i++){ is more easily and clearly written as for my $i ( 1 .. 10000 ) {
      3. int(rand(20000))+440000 produces always positive integer.

        If you don't need signed integers, your question would have been much simpler to answer.

      4. $k=substr(pack('l>',$j),1); print OUT $k;

        Packing and writing one value at a time is hugely expensive compared to packing all 10000 values in a single pass and then writing them once.

      5. For goodness sake, use a little horizontal whitespace.

        Don't you find this infinitely more readable?

        #!/usr/bin/perl use strict; print "Content-type: text/html\n\n"; srand(); my $fil = "ch"; open( OUT, '>', $fil ) or die $!; binmode OUT; for my $i ( 1 .. 10_000 ) { my $j = int( rand( 20_000 ) ) + 440_000; my $k = substr( pack( 'l>', $j ), 1 ); print OUT $k; } close( OUT ); print "DONE !";

        Remember that your source code is the equivalent of the professional chef's plated up meal.

        His presentation is what makes the difference between a paid for cover and a decent home cooked meal. It is both his edge and his profit margin.

      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".
      In the absence of evidence, opinion is indistinguishable from prejudice.

        Hi BrowserUk, Many thanks for your pertinent remarks and sorry for my bad code formatting, especially from a guy whose his father was a French cooking chief :-) In fact I append many integer values thus the ">>". And they could be negative, because they are latitudes and longitudes worldwide. I was also using the old fashioned format in the "for" loop... But despite using the "binmode" instruction, the resulting file is longer than 30000 chars for 10000 iterations, typically 30035 !!! Please, do you have any idea for this strange behaviour ?

Re^3: 3-byte representation
by ikegami (Pope) on Oct 13, 2011 at 16:38 UTC
    It was /256. Just misremembered cause I changed comps in the middle.

      I actually downloaded the >>8 version before it changed.

        Apparently. Sorry.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://931071]
[marioroy]: Is List::Util::XS a core Perl module?
[stevieb]: corelist List::Util::XS says "List::Util::XS was first released with perl v5.10.1"
[stevieb]: so yes, since v5.10.1 :)
[MidLifeXis]: According to [metaperl:// corelist], Perl 5.10.1
Lady_Aleena blurbles. One of her favorite modiles is now in "maintenance mode" in favor of a new fangled module.
[MidLifeXis]: D'oh. Slow out of the gate.
[marioroy]: Thanks stevieb, MidLifeXis.

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (12)
As of 2017-05-24 17:52 GMT
Find Nodes?
    Voting Booth?