Beefy Boxes and Bandwidth Generously Provided by pair Networks
good chemistry is complicated,
and a little bit messy -LW
 
PerlMonks  

Re: detecting changes in a localised variable

by TedYoung (Deacon)
on Feb 18, 2005 at 22:25 UTC ( #432551=note: print w/ replies, xml ) Need Help??


in reply to detecting changes in a localised variable

Here I tie $_ to a Complainer package that can warn/carp/croak any time something tries to assign to it.

#!perl -l package Complainer; use Tie::Scalar; use base Tie::StdScalar; use Carp; sub STORE { # Warn out any status info you want here. carp "Tried to assign to \$_"; } sub FETCH { $_ } package main; tie $_, Complainer; $_ = 1; local $_;

Update: Added the fetch method so that reading $_ actually works. not sure why I have to do that, Tie::StdScalar should handle that for me... but this was written in a hurry.

Ted Young

($$<<$$=>$$<=>$$<=$$>>$$) always returns 1. :-)


Comment on Re: detecting changes in a localised variable
Select or Download Code
Re^2: detecting changes in a localised variable
by Tanktalus (Canon) on Feb 18, 2005 at 22:46 UTC

    Tie? That's an idea I obviously didn't have. However, when trying your code, which I am ever so grateful for, I noticed that local $_ caused the carping - which was what I was trying to avoid. Since $_ was now localised, I didn't care if it was being changed because that's kinda like a new value. Somewhere in my do_something_complex function, I'm causing a file to be loaded (only once - there's lots of caching going on). And that file load has a "while (<$fh>)" line in it to parse out the file. And so I'm getting about a bazillion carps - even after localisation.

    Hopefully this helps make my original query more clear... maybe not possible, but clear :-)

    Update: That all said, this file load was the problem. So my code is cleaner now because of this, although the general question is, I think, a useful question - how to determine a variable changing, discounting any localised changes. In other words, a variable whose change will propogate back up the call stack.

      Yes, I was about to mention, as I was reading your post:

      while (<FH>) {

      does not localize $_

      Ted Young

      ($$<<$$=>$$<=>$$<=$$>>$$) always returns 1. :-)

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://432551]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (8)
As of 2015-07-04 19:17 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls