Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re^3: 3-byte representation

by Anonymous Monk
on Oct 13, 2011 at 10:48 UTC ( [id://931193]=note: print w/replies, xml ) Need Help??


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

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...

Replies are listed 'Best First'.
Re^4: 3-byte representation
by BrowserUk (Patriarch) on Oct 13, 2011 at 12:36 UTC

    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 ?

        do you have any idea for this strange behaviour ?

        Frankly, no. When I run the version I posted on my system:

        C:\test>del ch C:\test>type junk4.pl #!/usr/bin/perl use strict; 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 !"; C:\test>junk4 DONE ! C:\test>dir ch Volume in drive C has no label. Volume Serial Number is 8C78-4B42 Directory of C:\test 13/10/2011 15:29 30,000 ch 1 File(s) 30,000 bytes 0 Dir(s) 119,252,598,784 bytes free

        I get exactly the result you'd expect?

        Are you running it via a webserver? If so, maybe that has something to do with it, but that's not my arena.


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

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others exploiting the Monastery: (4)
As of 2025-06-21 14:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.