http://www.perlmonks.org?node_id=375096

jeff316 has asked for the wisdom of the Perl Monks concerning the following question:

Hi All, trying to teach myself perl and am running into some frustration using write. I've written a simple script to count the occurences of digits in numbers and compare them to the "expected" frequency (Benford's Law), but when I go to print it I can't seem to get the format right, I get "runaway format" if I try to do it per the documentation I have. Here's the exisitng write section:

<snip a bunch of stupid newbie code>
write; format FtDreport= *****************Digits 1 - 99 ************************************ NUMBER**OCCURENCES***EXPECTED *****ACTUAL************************** ******************************************************************* ~~ ^< ^>>>>> ^>>>>>>>> ^>>>>>>>> $digits, $ftdocc, $ftdexp, $ftdact ******************************************************************* + .
This works great if the file I'm reading has enough numbers (say 100K) but not if I run through 100 or so. The problem is with the "^" which I know means wrap this line, but if I try the following using @>> or even @# I get the runaway format. I can post the rest of the script if it would help . I'm using active state perl 5.83 on win32....Can anyone point me to a good resource for "write" or clue me in if I'm making some stupid mistake?

TIA-
Jeff

Replies are listed 'Best First'.
Re: Making sense of "write"??
by Paladin (Vicar) on Jul 16, 2004 at 19:57 UTC
    ^ doesn't really mean wrap the line.

    What it does is put as much text into the field as it can, then remove that text from the variable so the next time it's used, the next part of the text will be filled in.

    @ doesn't do this, so combined with the ~~, which means to repeat over and over until the variable is empty, you get the first part over and over again.

    You can find much more info on Forms in perldoc perlform.