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:
bar.pl just has the following:#!/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");
Unfortunately, the XML file (that foo.pl reads) contains all kinds of yucky shell metacharacters such as quotes, newlines etc:#!/usr/bin/perl -w use Getopt::Std; getopts('d:p:'); our $opt_d; our $opt_p; print $opt_p, "\n"; print $opt_d, "\n";
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?<?xml version="1.0"?> <data config="dev"> <SomeTag>data</SomeTag> <AnotherTag>data</AnotherTag> <SQL>select foo from bar where baz = 'something'</SQL> </data>
In reply to system & shell metacharacters by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |