首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Perl中,如何将整个文件读入字符串?

在Perl中,如何将整个文件读入字符串?
EN

Stack Overflow用户
提问于 2009-06-05 00:04:30
回答 11查看 187.9K关注 0票数 124

我正在尝试打开一个.html文件作为一个大的长字符串。这就是我得到的:

代码语言:javascript
复制
open(FILE, 'index.html') or die "Can't read file 'filename' [$!]\n";  
$document = <FILE>; 
close (FILE);  
print $document;

这会导致:

代码语言:javascript
复制
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN

但是,我希望结果看起来像这样:

代码语言:javascript
复制
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

这样我可以更容易地搜索整个文档。

EN

回答 11

Stack Overflow用户

发布于 2009-06-05 01:28:49

我会这样做:

代码语言:javascript
复制
my $file = "index.html";
my $document = do {
    local $/ = undef;
    open my $fh, "<", $file
        or die "could not open $file: $!";
    <$fh>;
};

请注意open的三参数版本的用法。它比旧的两个(或一个)参数版本要安全得多。还要注意词法文件句柄的使用。出于许多原因,词法文件句柄比旧的无字变体更好。我们在这里利用了其中的一个:当它们超出范围时就会关闭。

票数 100
EN

Stack Overflow用户

发布于 2009-06-05 08:55:02

使用File::Slurp

代码语言:javascript
复制
use File::Slurp;
my $text = read_file('index.html');

Yes, even you can use CPAN

票数 81
EN

Stack Overflow用户

发布于 2009-06-05 03:20:57

所有的帖子都是稍微不那么地道的。这个成语是:

代码语言:javascript
复制
open my $fh, '<', $filename or die "error opening $filename: $!";
my $data = do { local $/; <$fh> };

大多数情况下,不需要将$/设置为undef

票数 57
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/953707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档