在尝试以一种聪明的方式回答old question时,我将尝试这样做,但不知道它是否会成功:

#!/usr/bin/env perl

use strict;
use warnings;

use Tie::File;
tie( my @data, 'Tie::File', \*DATA ) or die "Cannot tie DATA";

foreach ( @data ) {
    print;
}

foreach ( @data ) {
    print scalar reverse;
}


__DATA__
one
two
three
four
five
six

我希望它要么起作用,要么死亡;我得到的是意外的:
#!/usr/bin/env perluse strict;use warnings;use Tie::File;tie( my @data, 'Tie::File', \*DATA ) or die "Cannot tie DATA";foreach ( @data ) {    print;}foreach ( @data ) {    print scalar reverse;}__DATA__onetwothreefourfivesixlrep vne/nib/rsu/!#;tcirts esu;sgninraw esu;eliF::eiT esu;"ATAD eit tonnaC" eid ro ) ATAD*\ ,'eliF::eiT' ,atad@ ym (eit{ ) atad@ ( hcaerof;tnirp    }{ ) atad@ ( hcaerof;esrever ralacs tnirp    }__ATAD__enoowteerhtruofevifxis

试图将__DATA__绑定到Tie::File到底是如何绑定脚本和chomp呢?

最佳答案

DATA文件句柄只是指向它的文件的打开文件句柄。第一次读取它时,它还有一些其他的魔力,它会寻找程序中__DATA____END__令牌之后的第一个字节,从而为您提供预期的行为。

当您将*DATA绑定在一起时,您将遇到一读魔术的麻烦,并且将源文件的句柄置于文件顶部。

我怀疑如果在调用tell DATA之前先调用seek DATA,0,1(或者也许是tie),它将处于正确的位置并且像您期望的那样“工作”。

09-25 21:21