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