I've never been 100% sure whether referencing $^E, (which I always use myself), is effectively a synchronous call to GetLastError(), or whether it ($^E) only get's set if the XS code arranges to do so? Hence my reluctance to recommend $^E to others directly.
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
Lingua non convalesco, consenesco et abolesco. -- Rule 1 has a caveat! -- Who broke the cabal?
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
| [reply] [d/l] [select] |
The "get magic" on $^E is simply GetLastError() along with building a string out of the number returned.
But there is a problem with XS modules not arranging for $^E to be set, but that is because several XS modules use API(s) that return a failure code and the XS code fails to call SetLastError(), which means that calling Win32::GetLastError() doesn't get around such problems anyway.
| [reply] [d/l] [select] |