Re: [mh] eval'ing perl to create MH mqtt objects
Brian M <[email protected]> Wed, 27 Oct 2021 14:29:09 -0700
| Newsgroups | gmane.comp.misc.misterhouse.user |
|---|---|
| Message-ID | <[email protected]> |
I'm not sure I completely understand your problem, but MH is funky about
non-MH objects. It looks for "->new" statements and assumes those are
for its own objects. I use a lot of my own objects, and they work, but
you'll be in better shape if you precede the "...->new" statement with 4
or more spaces (not tabs). So "my $x = My::Object->new();" will get you
in trouble. " my $x = My::Object->new();" -- the same thing but with
four spaces in front of it -- will work. I only found this by reading
through the MH user-code parsing logic. If it finds the line begins
with four or more blanks (actually maybe three or more, don't remember),
it doesn't treat the object as one of its own objects.
Not sure that's the problem you're having, but maybe it'll help.
-Brian M.
On 10/27/21 1:21 PM, Tom MacLean wrote:
>
> So, I have played with this more. I notice that I cannot create any objects in my *.pl scripts -- if I do I get the complaint that "Global symbol $x requires explicit package name". Is there a workaround for that, or must all objects be created in MHT files?
>
> Thanks,
> Tom
>
> On 2021-10-20 22:43, Tom MacLean wrote:
>>
>> Hi All,
>> I apologize for being a hack .. despite using MH for almost 20 years,
>> my perl knowledge is poor.
>> I'm am trying to programatically make MQTT clones of specific MH
>> objects by calculating a new name, a suitable MQTT topic name and then
>> eval'ing the code to create the object and tie it to the original
>> object:
>> This code is in a sub that receives the object I am linking to "mh_obj":
>> eval "$new_obj_name = new mqtt_Item(\$mqtt_1, \"$mqtt_topic\");";
>> eval "$mh_obj_name->tie_event('sync_mqtt($mh_obj_name, $new_obj_name,0)');";
>> The first line runs without errors (or visible result). The second
>> line runs successfully (because the event gets tied), but the
>> $new_obj_name object isn't visible, I get 'Global symbol
>> "$Basement_Landing_mqtt" (this is $new_obj_name) requires explicit
>> package name'. So the tied event code does not see the object I
>> created in the first eval.
>> What went wrong? Is my eval scope only that of the sub, and once the
>> sub ends my created object dies? Is there a way this can work?
>> Thanks,
>> Tom
>
> ________________________________________________________
> To unsubscribe from this list, go to: https://lists.sourceforge.net/lists/listinfo/misterhouse-users
>
________________________________________________________
To unsubscribe from this list, go to: https://lists.sourceforge.net/lists/listinfo/misterhouse-users