Thread Nach Instanzieren von Win32::SqlServer ist $@ nach die() leer (6 answers)
Opened by TheMic at 2011-10-19 17:46

murphy
 2011-10-20 00:30
#153346 #153346
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
xs_DESTROY dürfte die native XSUB-Implementation des Destruktors sein, der Grund warum $@ zurückgesetzt wird liegt schlichtweg darin, dass der dazugehörige Perlwrapper den Aufruf dieser Funktion eben in einem eval verpackt (wenn auch unschön, denn ein Blockeval statt eines Stringevals hätte es auch getan).

Abhilfe für das beobachtete Problem könnte man dadurch schaffen, dass man die Variable, welche die Referenz auf das im Evalblock erzeugte Objekt hält, nicht innerhalb des Evalblockes zerstört, sondern ihren Geltungsbereich über die Behandlung des Inhaltes von $@ hinaus erweitert.

Konkret ausgeschrieben, aber ungetestet:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
use Win32::SqlServer;

do {
  my $connection;
  eval {
    $connection = new Win32::SqlServer();
    die 'aargh!'
  }
  if ($@) {
    print "Error: $@";
  };
};
When C++ is your hammer, every problem looks like your thumb.

View full thread Nach Instanzieren von Win32::SqlServer ist $@ nach die() leer