+ -
当前位置:首页 → 问答吧 → 关于Perl 绑定变量问题,谁给看下

关于Perl 绑定变量问题,谁给看下

时间:2010-11-24

来源:互联网

本帖最后由 DIYBYPERL 于 2010-11-24 00:20 编辑

在《Perl编程语言》 14.1.3 神奇地消除 $_   节中,有如下的例子
  1. #文件Underscore.pm
  2. package Underscore;
  3. use Carp;
  4. sub TIESCALAR { bless \my $dummy => shift }
  5. sub FETCH { croak 'Read access to $_ forbidden' }
  6. sub STORE { croak 'Write access to $_ forbidden' }
  7. sub unimport { tie($_, __PACKAGE__) }
  8. sub import { untie $_ }
  9. tie($_, __PACKAGE__) unless tied $_;
  10. 1;
复制代码
  1. #文件main.pl
  2. #!perl -w
  3. no Underscore;
  4. local $_='a';
复制代码
运行结果报以下错误信息:
Read access to $_ forbidden at main.pl line 3

但是在按这一节(14.1.3 神奇地消除 $_ )如下陈述看,只要局部化$_变量,就应该能访问$_,但为什么还不能访问呢?各位给看看:
这个让人好奇的外部的捆绑类用于防止非局部的 $_ 的使用。
通常,如果你想反悔并且让自己可以使用 $_,你就要对它使用 local,这也是所有要点所在。

作者: DIYBYPERL   发布时间: 2010-11-24

本帖最后由 zhlong8 于 2010-11-24 10:25 编辑

perlsub 大骆驼上的不少代码已经过时了,毕竟10年了



QUOTE:
Localization of special variables
If you localize a special variable, you'll be giving a new value to it, but its magic won't go away. That means that all side-effects related to this magic still work with the localized value.

  1. #Similarly, but in a way more difficult to spot, the following snippet will die in perl 5.9.0 :
  2.     sub f { local $_ = "foo"; print }
  3.     for ($1) {
  4.         # now $_ is aliased to $1, thus is magic and readonly
  5.         f();
  6.     }
复制代码

作者: zhlong8   发布时间: 2010-11-24

回复 zhlong8


这里面的 its magic 指的是什么了?不明白

作者: DIYBYPERL   发布时间: 2010-11-24