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:
umper;
$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>
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:
$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>