Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: call sub in string

by kwoff (Friar)
on Feb 16, 2002 at 08:50 UTC ( [id://145827]=note: print w/replies, xml ) Need Help??


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.)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://145827]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (5)
As of 2024-03-28 19:42 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found