亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Perl中,如何將整個文件讀取為字符串?

在Perl中,如何將整個文件讀取為字符串?

精慕HU 2019-11-27 10:26:54
我正在嘗試打開.html文件作為一個大的長字符串。這就是我得到的:open(FILE, 'index.html') or die "Can't read file 'filename' [$!]\n";  $document = <FILE>; close (FILE);  print $document;結果是:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN但是,我希望結果看起來像:<!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">  這樣,我可以更輕松地搜索整個文檔。
查看完整描述

3 回答

?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

加:


 local $/;

從文件句柄讀取之前。請參閱如何一次讀取整個文件?, 要么


$ perldoc -q“整個文件”

請參閱相關的文件句柄的變量中perldoc perlvar和perldoc -f local。


順便說一句,如果您可以將腳本放在服務器上,則可以擁有所需的所有模塊。請參閱如何保留自己的模塊/庫目錄?。


另外,Path :: Class :: File允許您飲和噴吐。


路徑::微小給出更加方便的方法,例如slurp,slurp_raw,slurp_utf8以及他們的spew同行。


查看完整回答
反對 回復 2019-11-27
?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

我會這樣做:


my $file = "index.html";

my $document = do {

    local $/ = undef;

    open my $fh, "<", $file

        or die "could not open $file: $!";

    <$fh>;

};

注意open的三參數版本的使用。它比舊的兩個(或一個)參數版本安全得多。還要注意詞匯文件句柄的使用。由于許多原因,詞匯文件句柄比舊的裸字變體更好。我們在這里利用其中一個優勢:它們超出范圍時會關閉。


查看完整回答
反對 回復 2019-11-27
?
叮當貓咪

TA貢獻1776條經驗 獲得超12個贊

您可以使用File :: Slurp模塊一步完成。


use File::Slurp;


$all_of_it = read_file($filename); # entire file in scalar

@all_lines = read_file($filename); # one line per element

Perl慣用的處理文件中所有行的方法是一次執行一行:


open (INPUT, $file)     || die "can't open $file: $!";

while (<INPUT>) {

    chomp;

    # do something with $_

    }

close(INPUT)            || die "can't close $file: $!";

這比將整個文件作為一行行讀取到內存中,然后一次處理一個元素要有效得多,這通常是(即使并非總是如此)錯誤的方法。每當您看到有人這樣做時:


@lines = <INPUT>;

您應該認真思考為什么需要一次加載所有內容。這不是一個可擴展的解決方案。您可能還會發現使用標準的Tie :: File模塊或DB_File模塊的$ DB_RECNO綁定會更有趣,這允許您將數組綁定到文件,以便訪問數組中的元素實際上是訪問文件中的相應行。 。


您可以將整個文件句柄內容讀入標量。


{

local(*INPUT, $/);

open (INPUT, $file)     || die "can't open $file: $!";

$var = <INPUT>;

}

這會暫時取消記錄分隔符的定義,并將在塊退出時自動關閉文件。如果文件已經打開,請使用以下命令:


$var = do { local $/; <INPUT> };

對于普通文件,您還可以使用讀取功能。


read( INPUT, $var, -s INPUT );

第三個參數測試INPUT文件句柄上數據的字節大小,并將那么多字節讀入緩沖區$ var。


查看完整回答
反對 回復 2019-11-27
  • 3 回答
  • 0 關注
  • 933 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號