From: shreeve@...2s.org (Steve Shreeve) Date: 2000-07-08T00:23:01+00:00 Subject: [ruby-talk:03897] Adding a '<<<' here_document syntax 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 < $coun. $titl $info->{'date_a'} $info->{'date_d'} 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 <
You have completed all required forms.

DONE # finish up list of assigned forms print < 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 << $coun. $titl $info->{'date_a'} $info->{'date_d'} DONE } } # indicate if all forms have been filled out print <<
You have completed all required forms.

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