2017-09-26 25 views
5

Perl File I/O'da open() işlevinin aşağıdaki kullanımını nasıl anlayabilirim?Perl'deki bu open() kullanımındaki noktanın anlamı nedir?

open(FHANDLE, ">" . $file) 

Ben sözdizimi in the docs bu tür bulmaya çalıştılar ama bulamadık; lütfen bir tane olduğunu unutmayın. ">" sonra.

Tüm anlayamadığım bir nokta nokta, geri kalanını biliyorum.

+0

https://perldoc.perl.org/perlop.html#Additive-Operators –

cevap

12

Bu, open'un eski, iki argüman formunun bir örneğidir (bundan sonra üç argüman open'un kullanılabilir olması gerekir). Perl'de, ., ek operatördür. İki dizeyi tek bir dizeye birleştirir.

Gönderdiğiniz kod satırı open(FHANDLE, ">$file") ile eşdeğerdir, yalnızca > ve $file öğelerini birleştirmenin farklı bir yöntemini kullanır.

Bu günlerde yapmanın en iyi yolu, bağlandığınız belgelerde gösterildiği gibi open(my $fhandle, '>', $file) olacaktır.

8

Bu iki argüman open'dur. Nokta ., Perl'de dizgi birleştirme işlecidir. İki argüman ile open çağrılırsa, ikinci argüman hem modu hem de yolu içerir.

Sizin durumunuzda, yazım için $file isimli dosyayı açacaktır. Bununla birlikte, birkaç nedenden dolayı bunu yapmamalısınız. Üç argüman-açık ve global GLOB filehandle yerine lexical dosya kümeleri kullanmak daha yaygındır.

Sözlük dosyası, Perl'in kapsam dışında kaldığı anda sizin için örtülü olarak kapattığından emin olur. Mod ve dosya adı için farklı hatalar kullanmak bir güvenlik sorunudur, çünkü aksi halde kötü niyetli bir kullanıcı dosyada mod değişiklikleri yaparak kaçak yapabilir.

open my $fh, '>', $file or die $!; 

şimdi sözcük dosya tanıtıcısına ve mod ayrılması ve dosya adına ek İÇİNDE, biz de her zaman iyi bir fikirdir bu kod, hataları kontrol.