in reply to XML::Twig Help

shravnk:

Wow, I reviewed the code but I'm somewhat at a loss. There are so many things to say that it's difficult to tell where to start.ell, let's see where to start. When I looked it over I found about 12 items in 10 lines of code.

First, I suggest that when you find yourself in the weeds, you should try using the strict, warnings and/or diagnostics modules. Then try to understand and solve each of them. Next, whenever you use a module, it's often very instructive to start with a working example program and make changes incrementally to it, rather than doing it all at once. Making one change at a time to a working example will also help you learn exactly what you're going.

I was thinking of doing a walkthrough item by item, but I don't have that sort of time. Here's a list of issues that you'll need to address:

Other things you'll want to address at some point:

I think I'll stop here and let you get some items corrected before continuing...

...roboticus

Replies are listed 'Best First'.
Re^2: XML::Twig Help
by shravnk (Initiate) on Jul 06, 2010 at 16:15 UTC

    roboticus-

    Updated code is the following:

    #!/usr/bin/perl print "Enter an input file, space, and output file\n"; use strict; use warnings; chomp(my $enter = <STDIN>); $_ = $enter; unless (m#.+\.nml .+\.xml#) {print "Unreadable input"; } my @fields = split(/ /, $enter, 9999); use XML::Twig; open (FILE, $fields[0]) or die "Can't open file"; my $file = <FILE>; my $t= XML::Twig->new( twig_roots => { "djn-geo" => 1}); $t->parsefile($file); open(STDOUT, ">$fields[1]"); $t->print;

    Still not sure why the XML::Twig line isn't working, I copied it verbatim from an example, and just changed the tag

    Thanks alot,

    shravnk

      shravnk:

      So you're prompting the user for a filename, and verifying that it contains ".nml" or ".xml". If it doesn't contain that, you print an error message and continue on. Hmmm....

      You really want to stop your program when you find a problem, so you should use the die function rather than print on line 8.

      Another problem is that with the expression you've given "foo.xml.abc.def" is a valid filename.

      After you open the file, you then read the first line of the file, and treat it as a filename to pass to parsefile. Unless your file contains the name of the XML file you're trying to process, that's going to be a bit of a problem...

      Also, you have *another* open statement you haven't checked yet...

      ...roboticus