Trying to parse a variable name

A

Aaron

Basically I'm reading a SQL predicate from an XML file. The predicate
contains a perl variable name.

I have a sub called parseValue that takes a literal string and then
returns the value.

Now, if I pass in a qq{} or ' ' quoted string it works fine, but when
I pass in the value from the XML file it doesn't work.

I should get the following output:

PARSED STRING: ENGINE_ID = 1
PARSED STRING: ENGINE_ID = 1

But I get the following:

PARSED STRING: ENGINE_ID = 1
PARSED STRING: ENGINE_ID = &parseValue($engine_id)

What the heck is going on?

I've included the code and the XML file below.

#!/usr/bin/perl

use XML::Simple;
use Data::Dumper;

$engine_id = 1;

sub parseValue
{
my $value = shift;

$value =~ s/\$(\w+)/${$1}/;

return $value;
}

print "PARSED VALUE: ",&parseValue('$engine_id'),"\n";

sub BySequence
{
$transforms->{Transform}->{$a}->{Sequence} <=>
$transforms->{Transform}->{$b}->{Sequence}
}

$transforms = XMLin("test.xml",forcearray => ["Transform"]);

foreach $transform (sort BySequence keys %{$transforms->{Transform}})
{
%transform = %{$transforms->{Transform}->{$transform}};

$delete_predicate = $transform{DeletePredicate};

print "$delete_predicate\n";
$delete_predicate =~ s/(\$\w+)/&parseValue($1)/g;
print "$delete_predicate\n";

%transform = ();
}

<?xml version="1.0" ?>
<Transforms>
<Transform Sequence="1" name="Planned Order">
<DeletePredicate>ENGINE_ID =
$engine_id</DeletePredicate>
</Transform>
</Transforms>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top