http://qs321.pair.com?node_id=123369


in reply to XS routine returns an extra depth of array refs

Returning 'undef' from your function on error and setting $! seems the best way of doing this. If you really want to throw an error directly from your XS, use the "croak" function, which behaves like die in Perl. (There's also a 'warn'.) These act like printf.
croak("Can't opendir %s!", dirname);