就地編輯的大多數示例是遍歷一個或多個文件的單行程序,每次讀取和打印一行。讀取整個文件,然後在就地編輯時打印?
我找不到任何將整個文件讀入數組,根據需要修改數組,然後使用^ I開關執行就地編輯時打印數組的任何示例。當我嘗試從鑽石操作員讀取整個文件時,編輯內容並打印整個內容,我發現打印輸出到STDOUT而不是ARGVOUT,並且ARGVOUT已關閉。我可以打開相同的文件輸出,然後打印到它,但我不知道我明白爲什麼這是必要的。這裏有一個例子:
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
my $filename = 'test.txt';
push @ARGV, $filename;
$^I = ".bk";
my @file = <>; #Read all records into array
chomp @file;
push @file, qw(add a few more lines);
print join "\n", @file; #This prints to STDOUT, and ARGVOUT is closed. Why?
運行上面,使預期中的test.txt文件的備份,但保留編輯的test.txt空,打印編輯的內容輸出到標準輸出代替。
爲什麼你找不到任何的例子,是因爲在Perl中讀取整個文件通常被認爲是不好的做法,只能進行逐行處理。 :)有很多更好的方法來處理閱讀。請參閱下面的答案,瞭解幾個具體原因。 – 2011-02-02 21:39:47
對不起@Robert P,但是有很多線處理任務,最容易首先加載所有線。如果你想刪除文件中間的行,該怎麼辦?在包含其他圖案的線條之前,刪除包含700至750行*之間圖案的線條?在排序後處理輸入,然後在打印前刪除頂部和/或底部的一些行? – mob 2011-02-02 23:04:48
偉大的答案。 @ mob和@ ephemient都是我想要的東西,所以真的是要拋棄,接受。 – d5e5 2011-02-03 19:15:27