Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

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!


Comment on Re^2: 3-byte representation
Reaped: Re^3: 3-byte representation
by NodeReaper (Curate) on Oct 13, 2011 at 10:47 UTC
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.

      Also,

      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?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others surveying the Monastery: (7)
As of 2014-08-23 14:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The best computer themed movie is:











    Results (174 votes), past polls