Matz (and others),
I'm a Perl user who has been learning about Eiffel and has recently discovered
Ruby! I am very impressed with the excellent work on the language and it's
impressive implementation.
Much of my Perl work is for web development. I would like to convert to using
mod_ruby if possible. There is, however, one little piece of syntactical sugar
that I'd like to suggest and get your comments.
In Perl, I often use "here document" syntax in my code, but I have never liked
a few things about it:
1) It leaves leaves my code looking very ugly, with the terminators not
indented properly, as in:
# output the next row
print <<DONE;
<tr valign=top bgcolor=#$bgco>
<td width= 27 align=right >$coun.</td>
<td width=279 align=left >$titl</td>
<td width= 96 align=center>$info->{'date_a'}</td>
<td width= 96 align=center>$info->{'date_d'}</td>
</tr>
DONE
}
}
2) Also, I like to indent the actual HTML so my program is more readable, but
when I do this, the generated HTML has a bunch of leading whitespace which can
sometimes even cause problems... uck! To prevent the leading whitespace
problem, I usually do this:
# indicate if all forms have been filled out
print <<DONE unless $coun;
<tr valign=top bgcolor=#cccccc>
<th><br>You have completed all required forms.<br><br></th>
</tr>
DONE
# finish up list of assigned forms
print <<DONE;
</table>
</div>
DONE
}
}
but... the final result is hardly elegant looking.
To solve these problems, I developed a little mod_perl extension that
processes my source in a way that solves both of these problems. It's
implemented with a single regex in Perl like this:
s|<<<\s*(\w+)(.*?)\1|'<<'.($x=$1).(($y=$2)=~s/^[^\S\n]+//gm,$y).$x|goes;
Essentially, it defines a modified "here document" which uses the <<< syntax
(called the "chevron") and it does the following things:
1) lets me indent the end of my here document
2) trims all preceeding whitespace of the here document content
Thus, in the orginal code:
1) I can indent my "DONE"'s with the rest of the source code, and
2) The output HTML has the leading whitespace chopped off
Here's what the Perl code looks like now, with the chevron syntax:
# output the next row
print <<<DONE;
<tr valign=top bgcolor=#$bgco>
<td width= 27 align=right >$coun.</td>
<td width=279 align=left >$titl</td>
<td width= 96 align=center>$info->{'date_a'}</td>
<td width= 96 align=center>$info->{'date_d'}</td>
</tr>
DONE
}
}
# indicate if all forms have been filled out
print <<<DONE unless $coun;
<tr valign=top bgcolor=#cccccc>
<th><br>You have completed all required forms.<br><br></th>
</tr>
DONE
The end result of using '<<<' instead of the traditional '<<' is more readable
code. For web work, where I think Ruby can *really* shine, I think a simple
syntactical addition like this could really enhance its readability and the
overall elegance of the language with minimal (if any) impact.
I'm very interested to see your comments and those of others...
Thanks!
Steve Shreeve
S2S Solutions
http://s2s.org