使用Perl FileHandle和标量包含字符串而不是文件名

时间:2014-07-23 11:27:37

标签: perl filehandle

我的脚本使用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

有什么想法吗?

感谢。

2 个答案:

答案 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;