Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW

Editing multiple xml files in perl with help of Getopt::Long and Globbing

by chidori (Novice)
on Nov 30, 2013 at 07:50 UTC ( #1065038=perlquestion: print w/replies, xml ) Need Help??
chidori has asked for the wisdom of the Perl Monks concerning the following question:


I am using a perl script edit certain xml tags. Previously i was picking up the xml files one by one and running the code. But I thought it would be easy if i can edit all xml files in a single go.

Below is the part of my code
#!/usr/bin/perl use Getopt::Long; use XML::Twig; foreach my $xml(@file) { $twig->parsefile_inplace($xml); } sub getoption{ GetOptions ("file=s" => \$data,) or die("Error in command line argumen +ts\n"); @file=glob($data); #globbing to pick '*.xml' }
The code seems to work. But i would like to know if there is a better way to do and also if there is any pitfall the way i do it now.

Script calls

./script -f config.xml ./script -f '*.xml'

Replies are listed 'Best First'.
Re: Editing multiple xml files in perl with help of Getopt::Long and Globbing
by hippo (Abbot) on Nov 30, 2013 at 11:08 UTC

    Unless you are doing something else with other options to the script which you aren't showing us, I don't see any reason for you to do the globbing in the script. Why not just use the shell's globbing instead? If you invoke the script with:

    ./script *.xml

    and handle this in your code with:

    while (my $file = shift @ARGV) { next unless -r $file; # Process the file here }

    would that not achieve the end result?

      Shell globbing isn't universal or portable. So in many cases, it's appropriate to expand globs within the Perl script using File::Glob or other mechanism. For example, in the Microsoft Windows shell (Command Prompt), wildcards are not as powerful or as useful as BSD-style globs; in particular, they can't be used to expand directories (folder), which makes them generally useless for my purposes. I invariably need my Perl scripts to permit their users to glob multiple folder names.

      Sorry , didn't mention in my intial post. Yes, i have other options that will get the date and another option to print the xml content. Thats why i didn't do shell globbing.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1065038]
Approved by boftx
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (2)
As of 2018-05-22 18:18 GMT
Find Nodes?
    Voting Booth?