Here are some experiments with format. It behaves
in a rather weird fashion when eval'ed. It seems to replace
all the 'template variables' in the format by their actual
values when the evaluation is called. The (kludgy) workaround
I found is to eval on each iteration of the for $i(0..9)
The use of the eval is to be able to get the longest name
of the list and construct the format according to it
my $i;
my $format = "format STDOUT =\n"
. '@>>> '
. '@' . '<' x ($longest + 3)
. " @<<<<\n"
. '$i, $results[$i]->[0], $results[$i]->[1]'
. "\n.\n";
print $format;
eval $format;
die $@ if $@;
for $i (0..9) {
write;
}
(I think that there should be a better way to do the above though)
The most straightforward approach of using format in this script
would be the following:
my $i;
format STDOUT_TOP=
Rank Name Posts
--------------------------------
.
format STDOUT =
@||| @<<<<<<<<<<<<<<<<<<<< @<<<<
$i, $results[$i]->[0], $results[$i]->[1]
.
for $i (0..9) {
write;
}
But in a nicer and more obfuscation prone style, one could
prefer
my $picture = '@||| @' . '<' x $longest . "@<<<<\n";
for my $i (0..9) {
formline($picture, $i, $results[$i]->[0], $results[$i]->[1]);
}
print $^A; # use English; print $ACCUMULATOR;
Eeek!
Cheers,
briac
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.