http://qs1969.pair.com?node_id=145827


in reply to call sub in string

I've used this with heredocs in CGI scripts. Example:
#!/usr/bin/perl sub top_html { return "<html><head>$_[0]</head><body>"; } print <<EOF; @{[top_html("catchy title")]} blah.. EOF

Explanation:
@{ somearef } takes an array reference "somearef" and dereferences it.
[ somearray ] takes a list "somelist" and makes an array ref of it.
@{ [ function() ] } takes the list returned by "function()" and wraps it in a way that is interpolatable by quotemarks.

Replies are listed 'Best First'.
Re (tilly) 2: call sub in string
by tilly (Archbishop) on Feb 16, 2002 at 16:21 UTC
    Sorry, you just hit a pet peeve of mine.

    I strongly recommend against using that interpolation trick. Just using interpolation takes one more character, is going to be a lot easier for people to pick up, and doesn't impose list context when scalar is more appropriate.

    If the last bit didn't make sense to you, try it with localtime. Fighting central ideas of the language just to be able to use cool tricks isn't a very good tradeoff.

    Now before you point out that heredocs don't allow you to break strings I should mention that they also wind up conflicting with my indentation. I therefore find that the qq() syntax works far better for me and is more flexible. (Unless, of course, your scripts are part of a bigger system and templating is a better idea than big fat heredocs.)