in reply to Re^4: Writing to a file using Formats
in thread Writing to a file using Formats

Great to hear that you are having fun the code!!

One thing that I strongly suggest is "incremental development". Perl compiles and runs so quickly that it is possible to write some code and test it, then write more code. For example, to test the command loop, this is it:

#!usr/bin/perl -w use strict; while ( (print "Enter a pair of numbers (space between) or quit: "), (my $line =<STDIN>) !~ /^\s*q(uit)?\s*$/i ) { print $line; }
I'm not saying to try a whole bunch of random stuff in the hope that it will work, but rather take a small piece, think about the errors, make corrections, get that piece working then get the next piece working.

Printing:
I you are having trouble with a printf(), just use the standard Perl print, print "$var1 $var2\n"; to make sure that the variables are defined, etc. Use of "warnings" will show at runtime if a $var is undefined in the print.

One common error in printf format statements is not leaving a space after each format descriptor if you want tabular output. The WIDTH is a minimum width, and if what is required is more, it will "spill over". Putting a space between format fields guarantees on whitespace character between columns which is usually what you want.

#!usr/bin/perl -w use strict; my $string_a="ABCDEGFH"; my $string_b="X"; printf("%-5s%s\n", $string_a, $string_b); #$string_a is too long printf("%-5s %s\n", $string_a, $string_b); #space between fields printf("%-5s%s\n", $string_b, $string_a); #looks ok, but not! #If $string_b>=5 chars! #no space between columns. __END__ prints: ABCDEGFHX ABCDEGFH X X ABCDEGFH

Replies are listed 'Best First'.
Re^6: Writing to a file using Formats
by biohisham (Priest) on Aug 05, 2009 at 11:26 UTC
    I think this spilling-over is an advantage in printf, because in formats if you are not setting the placeholders correctly, it trims the ends, for example
    my $string = "something"; format STDOUT= @<<<< $string . write; #"somet" and the rest is chopped away.
    and in my case, I go back and start counting the "<"s and recalculate, and imagine if someone uses binoculars for glasses and how their counting would be. So in printf all the intervention you got to do in case something is spilling over is to just add a space or anything, I mean, a little intervention...

    Frankly, , your tips are so amazing, I mean, they come to me at time that I need them emphasized over and over, usually, I do it this way, "incremental development" all the time, it takes time from me but I think I am gaining momentum, sometimes I lose track and go random, get stuck and come to PM to wench me out of the mud and other times I am smooth...hehehe

    ummm, finally, check this Personality Splits and Programming, ELISHEVA wrote some informative advice, you might wanna add yours too for us all to learn from.... thanks Marshall and I am indebted.
    Excellence is an Endeavor of Persistence. Chance Favors a Prepared Mind