2013-08-21 38 views
10

你可以在內存中打開文件句柄嗎?在內存中打開文件意味着什麼?

內存部分我不清楚,這是什麼意思?

如果這意味着您可以使用計算機的內存,它不是已經這樣工作嗎?

+0

你在哪裏讀到這個?這是誤導性的,因爲文件句柄總是*內存結構。它很可能是指直接打開文件句柄到Perl標量變量(在內存中)。 – Borodin

+0

是的,你的評論是正確的,這就是我的意思 – airnet

+1

'perldoc -f open'指這些爲「內存中的文件」 – mob

回答

16

這意味着你可以使用文件句柄來寫入和讀取標量變量。

my $var = ""; 
open my $fh, '>', \$var; 
print $fh "asdf"; 
close $fh; 
print $var;   # asdf 

歸根結底,這是隻是多了一個方式做

$var .= "asdf" 

但也有背景,其中更方便或更合適使用比字符串操作範例文件句柄範式。

例如,開始與這個代碼:

open my $fh, '>', $logfile; 
... 
print $fh $some_message_to_be_logged; 
... 500 more print $fh statements ... 
close $fh; 

但是,你知道嗎?現在,我寧願我的記錄日誌消息在一個標量,也許這樣我就可以通過他們尋找,操縱它們都寫磁盤之前,等我可以我所有的print語句改爲

$logvar .= $some_message_to_be_logged 

但在這種情況下更改open聲明更方便。

open my $fh, '>', \$logvar 
0

您可以直接打開文件句柄到標量變量。當你有一些行爲像文件一樣的東西時,它特別有用,但你不想在磁盤上有一個。這個例子是從perldoc採取:

close STDOUT; 
open(STDOUT, ">", \$variable) 
or die "Can't open STDOUT: $!"; 

它關閉STDOUT,然後重新打開它附連到$variable