use v6-alpha;
=head1 Interpolating Functions or Expressions within Strings
You want to expand a function call or expression within a string.
=cut
sub function { 'jumped' };
class Dog { method bark { 'woof!' } }
# You can break your string into concatenated pieces (the long way):
my $answer = 'The quick ' ~ function() ~ ' over the lazy dog';
# Or you can interpolate function calls using &function() by using "", qq//,
# or q:f// string delimeters. The function call must begin with ampersand (&)
# and end with paranthesis:
$answer = "STRING &function() MORE STRING";
$answer = qq/STRING &function() MORE STRING/; # very liberal interpolation
$answer = q:f/STRING &function() MORE STRING/; # interpolates functions only
# To interpolate a class method, using closure curlies:
$answer = "STRING {Dog.bark} MORE STRING";
# And for expressions take the long route:
my $n = 100;
my $phrase = "I have " ~ ($n + 1) ~ " guanacos.";
# Or use closure curlies within "", qq//, or q:c// quoted strings:
$phrase = "I have {$n + 1} guanacos.";
$phrase = qq/I have {$n + 1} guanacos./; # liberal interpolation
$phrase = q:c/I have {$n + 1} guanacos./; # interpolation closures only
# Interpolate into a here document:
sub send_mail { say '1..1'; say 'ok 1' }
sub get_manager_list { 'manager@example.org' }
my $naughty = my $target = 'naughty@example.org';
die "Couldn't send mail" unless send_mail(qq:to/EOTEXT/, $target);
To: $naughty
From: Your Bank
Cc: &get_manager_list($naughty)
Date: { do { my $now = `date`; $now .= chomp; $now } } (today)
Dear $naughty,
Today, you bounced check number { 500 + int rand(100) } to us.
Your account is now closed.
Sincerely,
the management
EOTEXT