- 论坛徽章:
- 0
|
今天要讲得是lock_value这个函数。它的功能是能锁住某个Key对应的值。但是其实Perl会告诉你这个锁不安全。
lock_value的用法是lock_value( %has, key );- lock_value( %hTestHash, "FOUR" );
- eval{# We can modify the value here
- $hTestHash{ FOUR } = 5;
- };
- print "We can't modify the value of key 'FOUR', when it is locked:[$@]" if $@;
- printHash( \%hTestHash );
复制代码 这里我们试图把在昨天已经加入的"FOUR" => 4 , 修改其值为5。但由于我们刚刚已经讲"FOUR"对应的值锁住了,所以这里修改值的操作失败了。看来锁管用。但这时候,Perl发出了个warning:- Cannot usefully lock values in an unlocked hash at /develop/Project/Perl/pppk/Hashes/Recipe5.3/perl.pl line 95
复制代码 怎么?还不能有效锁住value吗?的确。我们接下来的操作会让显示这句话的一些意思。
既然锁住的是key对应的value,那我们把这个key删掉会如何呢?锁会阻止我删除吗?带着这样的疑问,我尝试了下。- eval{# the lock on "FOUR" is expired.
- delete $hTestHash{ FOUR };
- };
- print "We can delete key 'FOUR' when it is locked." if not $@;
- printHash( \%hTestHash );
复制代码 从异常和输出来看,即使value被锁住,但是居然是可以删除key的。而且这里我提前注释了下,已有的锁过期了,失效了。 |
|