http://qs1969.pair.com?node_id=214952

John M. Dlugosz has asked for the wisdom of the Perl Monks concerning the following question:

This took some figuring, let me tell you!

Here's what I figured out:

A statement like

my $database= new Win32::OLE:: "SourceSafe"; $database->Open ($name);
fails if the variable $name is bound to a Tk text widget. Just making a local copy of the value and using that copy works fine!

My guess is that the XS code behind the OLE method generator is assuming plain scalars and doesn't like tied variables.

Ouch.

—John

Replies are listed 'Best First'.
Re: When magic goes awry - Tk and OLE mysterious problem
by theorbtwo (Prior) on Nov 21, 2002 at 23:29 UTC

    Another workaround would probably be to force stringification (or numification, if approprate). That is, do $database->Open ("$name");.


    Warning: Unless otherwise stated, code is untested. Do not use without understanding. Code is posted in the hopes it is useful, but without warranty. All copyrights are relinquished into the public domain unless otherwise stated. I am not an angel. I am capable of error, and err on a fairly regular basis. If I made a mistake, please let me know (such as by replying to this node).

Re: When magic goes awry - Tk and OLE mysterious problem
by mpeppler (Vicar) on Nov 22, 2002 at 01:23 UTC
    There are lots of gotchas with magic variables when writing XS code.

    My earliest exposure was when checking for a number (via SvNOK(sv)) and getting a false return - because the perl variable was tainted...

    Michael