How to tie every variable in perl script?
Asked Answered
T

1

5

I want to see every place when variable in perl script is created/accessed/destroyed

It is easily reachable using tie or Variable::Magic

But how to apply this magic automatically when variable is created?

Twotime answered 24/2, 2017 at 8:39 Comment(4)
You might want to put these all in an associative array and tie that instead so that it's clear in your code where the magic lies.Rubble
Variables are "created" in BEGIN phase. So I don't see how to track that via these methods ... ?Wits
@zdim: I thought I may use: BEGIN { *CORE::GLOBAL::my = sub{ apply_magic_to_new_variable( shift ) } } However my maybe called as bareword only. It will be very handy if called with the reference to new variable when this hook suppliedTwotime
@tadman: I want to create module for debugger which will show all variables which are created in one scope, but accessed/destroyed from others. So I draw dataflow with Graphviz for thirdparty modules. Just running: perl -d:DebugHooks::DataFlow script.plTwotime
H
2

You can take a look at B::Xref which generates a cross reference listing of all variables in your application. Basically, you need to walk the byte code to find all variable declarations/initializations. You can also alter the byte code, i.e. add code to tie the variables. However, I cannot point you to an example, because this is rarely done.

As an alternative, you could use a code filter to add the tie() instructions. However, code filters are not guaranteed to correctly identify variable declarations/initializations.

Himalayas answered 18/7, 2017 at 12:20 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.