Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

acme (189)

acme
  (email not shown publicly)
http://www.astray.com/

Leon Brocard (aka acme) is an orange-loving Perl eurohacker with many varied contributions to the Perl community, including the GraphViz module on the CPAN. YAPC::Europe was all his fault. He is still looking for a Perl Monger group he can start which begins with the letter 'D'.

Journal of acme (189)

Monday April 07, 2008
03:58 AM

Delimiters

[ #36089 ]
It has just struck me that the following line of a Template Toolkit template has six different delimiter styles: <, ", [%, (, ', and {:

<a href="[% uri_for('add_size', {product_id => product.id}) %]">Add new size</a>

Is this too many or just right?

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • It may not be pretty, but it does make reading the code much easier.

    }) %]"> enables the reader to extract information that the single-delimiter style ))))) cannot provide. I think that ))))) is prettier, but less practical.

    } is the end of a hash
    ) is probably the end of a function call
    %] is the end of a TT directive
    " is the end of text; the following > tells us it's an SGML-ish attribute value
    > is the end of an SGML-ish tag
    • I think that ))))) is prettier, but less practical.

      Funny you say that, ‘cause I was just thinking the same about sigils today. Yeah sure, they’re noisy and can gunk up the code – also, they’re extra red tape that needs to be typed over and over. But they make it so much easier to scan the code! Consider something like this:

      10 * $bar * log( $foo + 2 + cos( $baz ) )

      You can immediately tell apart the “slots” where variable values go, the static pieces, and the funct

      • I had that side-by-side experience when changing the javascript on http://speedtest.aoeu.nl/ [speedtest.aoeu.nl] to a more perl-like style. Another huge advantage of sigils is that you can use variable interpolation - that's the rare occasion where sigils are prettier than the alternative, lots of concatenated string literals.
      • I happen to think convenience is pretty.

        --
        J. David works really hard, has a passion for writing good software, and knows many of the world's best Perl programmers
  • It may be just right. Mainly because not having so many delimiters could be worse: requiring the need for hard-to-read escaping.

    On another note, maybe one of the delimiters of the mentioned template piece could disappear, by writing something like:

    a href=[% uri_for('add_size', {product_id => product.id}) | qq %]>Add new size</a>

    where the qq filter would add the leading and trailing quotes and would take care of any necessary entity-escaping. It hardly contributes to the original inte

  • There's more than five ways to do it :)

  • I like to use a helper function href() , which is a wrapper to c.uri_for, to generate that sort of thing (since it's so common)

    <a [% href(...) %]>Lorem ipsum</a>
  • when I look at the J2EE stack, or the LAMP stack, or any of the other "web based" shite, I long for the elegance of native GUIs..... NeXTStep in particular. I wonder if us engineers will ever be able to steal things back from the marketing droids.
  • Those are all quoting characters. Additional delimiters in that string are whitespace, comma, equals sign, => and a period for a total of eleven delimiters.

    But quoting in particular is more interesting than delimiting in general. Hofstadter wrote a great book about it. Maybe you've heard of it. :)

    Using different quoting syntax for different contexts makes perfect sense to me. Here's what your example would have looked like in a fake-lisp syntax I'm making up right now:

    (a (href (uri_for "add_siz