Being the guy who did the changes to ExtUtils::ParseXS, let me add my support for what tye said: The code in question worked purely by accident. The proper way to declare or initialize variables in an XSUB is in a PRE_INIT block! ExtUtils::ParseXS 3.XX just became strict in telling you about the problem in your code. It could have instead broken your code to segfault because of the old behaviour being an accidental misfeature and side-effect of the horrors that lurk in EU::ParseXS' code generation.

Yep - the file in question has now been amended in line with tye's recommendation, and all is well.Interestingly enough, that file had been in that state since 1998, and had produced no ill effects (afawk). There was even one abomination that did essentially this:

'dims' (the 2nd argument supplied to foo) is an SV* ... but then there's a second 'dims' which is a PDL_Long*.Dunno how that worked ...

ExtUtils::ParseXS 3.XX just became strict in telling you about the problem in your code

Which is a good thing - though it didn't exactly complain in the right way.It merely told us that there was no typemap entry for PDL_Long*. And, sure enough, inserting a typemap entry for PDL_Long* fixed the problem, though that's the wrong fix.