in reply to Start tag expected

use warnings;

With warnings turned on, perl will tell you there are syntax errors.

Here is a stripped version of your code:

use strict; use warnings; my $file = (<DATA>); Data___ <?xml version="1.0"?> <opt> <node> <val>1</val> </node> <node> <val>2</val> </node> <node> <val>3</val> </node> </opt>

Here is the warings:

Number found where operator expected at c.pl line 12, near "<val>1" (Missing operator before 1?) Bareword found where operator expected at c.pl line 13, near "</node" (Might be a runaway multi-line // string starting on line 12) (Missing operator before node?) Bareword found where operator expected at c.pl line 16, near "</node" (Might be a runaway multi-line // string starting on line 15) (Missing operator before node?) Bareword found where operator expected at c.pl line 19, near "</node" (Might be a runaway multi-line // string starting on line 18) (Missing operator before node?) syntax error at c.pl line 8, near "?xml version="1.0"?>" Execution of c.pl aborted due to compilation errors.

use __DATA__, then the warnings go away.