XP is just a number | |
PerlMonks |
Re^4: RFC: Tutorial: use strict; now what!?by Xiong (Hermit) |
on Feb 17, 2012 at 15:44 UTC ( [id://954551]=note: print w/replies, xml ) | Need Help?? |
I am trying to follow this as I use hashes all over the place. What exactly is a soft reference. tangent, you'll get plenty of explanations of symbolic references. But even after you understand them well it may not be clear how hashes come into this, in almost the same breath. To recap, moritz offered hashes as an alternative to hard references. There was some discussion of this and JavaFan noted hashes can invite some of the same issues strict 'refs' is meant to avoid. You may not see the connection; it took me a moment to pick it up. Seen one way, use strict; is a typo-catcher. In the simple case:
... may not work as you expect because you really meant to type $x13 both times. But use strict; will complain that you did not declare $x31 and so the typo is caught. If you attempt to take a hard reference and make a typo, you'll get an error, too. But if you take a symbolic reference and don't use strict; then you will not get early notice of your typo. Where hashes begin to resemble (in a certain mental state) symbolic references is when you start stuffing a lot of unrelated data into a hash with literal keys; and then later you want to take something out:
The typo will not be caught, with or without use strict; instead, perl will happily autovivify $hash{pensionbalance} for you and immediately print it... although it's undefined. This can be an annoying thing to track down. For more on this, see Re: Accessing hash from within module, where I demonstrate exactly this kind of risky approach... and note that it's almost as evil as global variables. I would not even have mentioned it if the OP didn't seem solidly committed to globals in the first place. As questionable as it is, I still think it's better than no strict 'refs';
I'm not the guy you kill, I'm the guy you buy. —Michael Clayton
In Section
Meditations
|
|