我的脚本使用LWP :: Simple的get()函数从互联网上下载纯文本文件。
我想以文件句柄的方式处理这个字符串。我从http://www.perlmonks.org/?node_id=745018找到了这种“优雅”(好吧,我喜欢)的方式。
my $filelike = get($url); # whole text file sucked up in single string
open my $fh, '<', \$filelike or die $!;
while (<$fh>) {
# do wildly exciting stuff;
};
但我喜欢使用FileHandle;但是,我没有找到使用它的方法。所以:
my $filelike = get($url);
my $fh = new FileHandle \$filelike; # does not work
my $fh = new FileHandle $filelike; # does not work either
有什么想法吗?
感谢。
答案 0 :(得分:0)
FileHandle提供了一个fdopen
方法,它可以从符号引用中为您提供FileHandle对象。您可以打开原始文件句柄到标量参考,然后将其包装在FileHandle对象中。
open my $string_fh, '<', \$filelike;
my $fh = FileHandle->new->fdopen( $string_fh, 'r' );
(另请参阅this answer了解为何使用Class->new
代替间接new Class
表示法。)
答案 1 :(得分:0)
您是否意识到所有文件句柄都是IO :: Handle的对象?如果你想要的只是使用文件句柄作为对象,你根本不需要做任何事情。
$ perl -e'
open my $fh, "<", \"abcdef\n";
STDOUT->print($fh->getline());
'
abcdef
注意:在旧版本的Perl中,您需要添加use IO::Handle;
。