2011-09-21 12 views
8

Co oznacza ?

Nigdy nie zobaczyć tego rodzaju kodu przed ..

Odpowiedz

9

Szczególna „>: Thing” składnia instruuje system Perl IO do korzystania z określonego przez warstwę sprawa. Spójrz na PerlIO documentation dla "warstwy". Powszechne warstwy to "raw" i "utf8".

W tym przypadku pozwala to na użycie $ stdout jako pliku w pamięci, który powinien w końcu zawierać wszystko, co zostanie wysłane do STDOUT. Mówiąc bardziej ogólnie, składnia umożliwia otworzenie pliku w pamięci, a następnie wysłanie uchwytu pliku do innych funkcji, które normalnie zapisują do plików, aby można było gromadzić ich dane wyjściowe (lub dostarczać ich dane wejściowe).

można również osiągnąć ten sam rezultat poprzez otwarcie „plik”, co jest nawiązaniem do skalara:

open my $fh, ">:scalar", \$scalar or die; 
open my $fh, ">", \$scalar or die; 

To dostarczonych przez perlio, a realizowanego przez PerlIO::scalar, choć nie masz do „użytku "moduł umożliwiający dostęp do funkcji.

+0

Co oznacza '>: skalar? – asker

+0

Dodałem to na początku. – Alex

3

Perl używa numeru layered IO system. U dołu łańcucha znajduje się warstwa, która zajmuje się dostępem do mediów. scalar to warstwa systemu IO, która obsługuje odczytywanie i zapisywanie do skalaru zamiast pliku. Mówiąc

open(my $fh, '>:scalar', \$scalar) 

dla skalarnych uchwytami jest odpowiednikiem mówiąc

open(my $fh, '>:unix', $file_name) 

dla uchwytów OS. Jest to całkowicie zbędne, ponieważ Perl już wie, że jest to uchwyt skalarny, a nie uchwyt systemu operacyjnego.