Run gdb /usr/bin/perl and at the gdb prompt "r myscript.pl" then enter. When it seg faults use the back trace command (bt) to see where it fell over and post it here. Someone might recognise the function it falls over in. It is quite possible the XML and postgres libraries both contain the same symbol for a function but take different arguments. When that function is called it will sometimes (depending on how everything is linked) only get resolved in one place so one of the calls will be wrong. You can get a list of symbols in the postgres and libxml libraries using nm if that is the case or when you get the back trace you can check for that symbol in each library to rule that in/out.