All,
I have a script foo.pl that reads a tiny XML file into a variable. foo.pl then calls another Perl program bar.pl via system and attempts to give the XML to bar.pl with a command line switch -d:
#!/usr/bin/perl -w
open (XML, $somefile) || die "Could not open $somefile - $!";
my $xmldata;
while (<XML>) {
$xmldata .= $_;
}
close (XML);
system("bar.pl -p 1234 -d $xmldata");
bar.pl just has the following:
#!/usr/bin/perl -w
use Getopt::Std;
getopts('d:p:');
our $opt_d;
our $opt_p;
print $opt_p, "\n";
print $opt_d, "\n";
Unfortunately, the XML file (that
foo.pl reads) contains all kinds of yucky shell metacharacters such as quotes, newlines etc:
<?xml version="1.0"?>
<data config="dev">
<SomeTag>data</SomeTag>
<AnotherTag>data</AnotherTag>
<SQL>select foo from bar where baz = 'something'</SQL>
</data>
Only a portion of the xml data is actually making it into
$opt_d in
bar.pl. Do I have to escape every metacharacter in
$xmldata prior to calling
bar.pl?