2013-08-21 21 views
10

Dosya tanıtıcılarını bellekte açabilirsiniz?Bellek içindeki dosyaları açmak ne demektir?

Bellek içi kısmı açık değil, bunun anlamı ne?

Bu, bilgisayarın belleğini kullanabileceğiniz anlamına gelirse, zaten böyle çalışmıyor mu?

+0

Bunu nereden okuyorsunuz? Yanıltıcıdır, çünkü bir dosya tanıtıcısı * her zaman bir bellek içi yapıdır. Büyük olasılıkla dosya tanıtıcılarını doğrudan Perl skalar değişkenlerine (bellekte olan) açmaya atıfta bulunur. – Borodin

+0

evet, yorumunuz doğru, bu demek istediğim – airnet

+1

'perldoc -f open' gibi" bellek içi dosyalar "olarak adlandırılır – mob

cevap

16

Bu, skaler değişkenlere yazmak ve okumak için filehandles kullanabileceğiniz anlamına gelir.

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

Sonuçta bu

$var .= "asdf" 

Yapılacaklar sadece One More yoldur ama daha uygun veya dize manipülasyon paradigmaların daha dt paradigmalar kullanmak daha uygun olduğu bağlamlar vardır.

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

Ama biliyorum:

Örneğin, bu kod ile başlar? onlar diske yazılır önce Şimdi doğrusu ben

$logvar .= $some_message_to_be_logged 

ama için bütün print ifadeleri değişebilir vb onları manipüle belki böylece onlara arama yapabilirsiniz, bir skaler değişken sonra günlük iletileri kaydetmek istiyorum Bu durumda sadece open ifadesini değiştirmek daha uygun olur.

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

Filehandles'i doğrudan skaler değişkenlere açabilirsiniz. Özellikle bir dosya gibi davranması gereken bir şey olduğunda yararlıdır, ancak diskte bir tane istemezsiniz. Bu örnek, perldoc alınır:

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

Bu STDOUT kapatır ve daha sonra $variable bağlı yeniden açar.

İlgili konular