File: demo_interp

package info (click to toggle)
libgetopt-declare-perl 1.14-4
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 328 kB
  • sloc: perl: 1,386; makefile: 8
file content (44 lines) | stat: -rwxr-xr-x 969 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env perl

use strict;
use warnings;
use Getopt::Declare;

use vars qw{ $name $result $n };

my $interpolator = Getopt::Declare->new(<<'EOCMDS',[-BUILD]);
	[cluster:none]
	[repeatable]
	[pvtype: NOTDELIM /(?:%T.)+/ ]
	[pvtype: WS   /\s+/ ]

	\{{ <cmd:NOTDELIM> }}[<ws:WS>]	
			{ $self->{result} .= eval "no strict; $cmd"||'';
			  $self->{result} .= $ws if $ws; }

	<str>[<ws:WS>]	
			{ $self->{result} .= $str;
			  $self->{result} .= $ws if $ws; }
EOCMDS

sub interpolate($)
{
	$interpolator->{result} = '';
	$interpolator->parse($_[0]);
	return $interpolator->{result};
}


$result = 22;
$name = "Sam";
$n = 50;
sub average
{
	my ($sum, $count) = (0,0);
	foreach ( @_ ) { $sum += $_; $count++; }
	return $count ? $sum/$count : 0;
}

print interpolate('The person {{$name}} scored {{$result}}'), "\n";
print interpolate('The pass mark was {{$result * 2}}'), "\n";
print interpolate('The average of the first {{2*$n}} numbers is {{average 1..2*$n}}'), "\n";