The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;

use Test::More tests => 7;
use Test::Exception;

use String::Expand qw(
   expand_string
);

my $s;

$s = expand_string( "hello world", {} );
is( $s, "hello world", 'Plain string' );

$s = expand_string( "value of \$FOO", { FOO => 'expansion' } );
is( $s, "value of expansion", 'String with $FOO' );

$s = expand_string( "All the leaves are \${A_LONG_VAR_NAME_HERE}", { A_LONG_VAR_NAME_HERE => "brown" } );
is( $s, "All the leaves are brown", 'String with $A_LONG_VAR_NAME_HERE' );

$s = expand_string( "Some \${delimited}_text", { delimited => "delimited" } );
is( $s, "Some delimited_text", 'String with ${delimited}_text' );

dies_ok( sub { expand_string( "\${someunknownvariable}", {} ) },
         'Undefined variable raises exception' );

$s = expand_string( "Some literal text \\\$here", {} );
is( $s, "Some literal text \$here", 'Variable with literal \$dollar' );

$s = expand_string( "This has \\\\literal \\\$escapes and \$EXPANSION", { EXPANSION => "text expansion" } );
is( $s, "This has \\literal \$escapes and text expansion", 'Variable with literals and expansions' );