“绑定(tie)”变量是什么意思?这里,动词“tie(绑定)”是作为“bind(绑定)”的同义词来使用的。绑定变量基本上就是将函数绑定到内部触发器上以读写该变量。这意味着,作为一名程序员,在使用变量时您可以让 Perl 做额外的事情。如果从这个简单的前提出发,那么绑定接口已经演变为 Perl 中的面向对象方法了,它将 OOP 的复杂性隐藏在过程接口后面。
一般只需要接触三类主要的绑定变量:标量、数组和散列。因为绑定文件句柄比较复杂,所以它们属于比较高级的主题。
下面仅仅介绍一些比较简单的例子,更多详细的信息请参考perldoc文档, ,
, , , 以及
一 绑定标量以 Tie::Scalar::Timeout 模块为例:
- use Tie::Scalar::Timeout;
- tie my $k, 'Tie::Scalar::Timeout', EXPIRES => '+2s';
- $k = 123;
- sleep(3);
- # $k is now undef
第一部分,其中调用了 tie() 函数,演示了如何告诉 Perl 变量 $k 实际上绑定到了 Tie::Scalar::Timeout 包。在幕后,Perl 运行 Tie::Scalar::Timeout 模块的 TIESCALAR() 函数(这实质上有些象对一个常规对象调用 new() )。 TIESCALAR() 返回一个 Tie::Scalar::Timeout 类型的对象,该对象被赋给 $k 。
示例中传递给 Tie::Scalar::Timeout 的特定参数确保了它会在两秒钟之后超时。该模块还提供了其它选项,如在读了确定次数之后就超时。
二 绑定数组以Tie::CharArray 为例
- use Tie::CharArray;
- my $foobar = 'a string';
- tie my @foo, 'Tie::CharArray', $foobar;
- $foo[0] = 'A'; # $foobar = 'A string'
- push @foo, '!'; # $foobar = 'A string!'
现在你就可以像在C/C++/Java里面一样操作字符串了。
还有一个Tie::File的例子。
- use Tie::File;
- tie @array, 'Tie::File', filename or die ...;
- $array[13] = 'blah'; # line 13 of the file is now 'blah'
- print $array[42]; # display line 42 of the file
- $n_recs = @array; # how many records are in the file?
- $#array -= 2; # chop two records off the end
- for (@array) {
- s/PERL/Perl/g; # Replace PERL with Perl everywhere in the file
- }
- # These are just like regular push, pop, unshift, shift, and splice
- # Except that they modify the file in the way you would expect
- push @array, new recs...;
- my $r1 = pop @array;
- unshift @array, new recs...;
- my $r2 = shift @array;
- @old_recs = splice @array, 3, 7, new recs...;
- untie @array; # all finished
这里建立了一个list和file的关系,对list的操作会反映到file上去。
阅读(3791) | 评论(0) | 转发(0) |