Why are you using qx instead of File::Find::find()?
$ find2perl $filepath_root -name main.xml -type -f
#! c:\perl\5.14.1\bin\MSWin32-x86-multi-thread\perl.exe -w
eval 'exec c:\perl\5.14.1\bin\MSWin32-x86-multi-thread\perl.exe -S
+ $0 ${1+"$@"}'
if 0; #$running_under_some_shell
use strict;
use File::Find ();
# Set the variable $File::Find::dont_use_nlink if you're using AFS,
# since AFS cheats.
# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;
sub wanted;
# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, $filepath_root);
exit;
sub wanted {
my ($dev,$ino,$mode,$nlink,$uid,$gid);
/^main\.xml\z/s &&
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-f _
&& print("$name\n");
}