2016-01-29 12 views
5

mam tego podprogramu procedury, która ma identyfikatory zdefiniowane jakCo oznaczają identyfikatory Perla zaczynające się od gwiazdki *?

*VALID_NAME_REG_EX = \"[ a-zA-Z0-9_#.:@=-]+"; 
*MACRO_VALID_NAME = \"MACRO_VALID_NAME"; 

Spojrzałem plik dalej. Są one określane jako $MACRO_VALID_NAME.

Domyślam się, że zastępuje wartość prawą stroną napisu, ale nie jestem tego pewien i chcę potwierdzenia.

+1

Więcej informacji na temat zmiennych ciągłych i Typeglob można również znaleźć w rozdziale 7 w [Mastering Perl ] (http://shop.oreilly.com/product/0636920012702.do) i rozdział 1.21 w [Perl Cookbook] (http://shop.oreilly.com/product/9780596003135.do) –

+0

Możliwy duplikat [Demystifying the Perl glob (\ *)] (http://stackoverflow.com/questions/4865447/demystifying-the-perl-glob) – tripleee

Odpowiedz

7
*VALID_NAME_REG_EX = \"[ a-zA-Z0-9_#.:@=-]+"; 

Efekt ten ma to przypisać $VALID_NAME_REG_EX jako identyfikator ciągu Perl dosłownym "[ a-zA-Z0-9_#.:@=-]+"

To różni się od powiedzenia

$VALID_NAME_REG_EX = "[ a-zA-Z0-9_#.:@=-]+" 

które kopii napisu do powierzchnia przypisana do $VALID_NAME_REG_EX, więc może być później zmieniona

Literały Perl muszą być przeznaczone tylko do odczytu, aby mieć jakikolwiek sens, więc wynikiem przypisania jest utworzenie zmiennej $VALID_NAME_REG_EX, inaczej zwanej stałą. W przypadku próby przypisania do niego dostaniesz wiadomość coś podobnego

Modyfikacja tylko do odczytu wartości próbę

+1

nigdy nie znałem aspektu read-only of tageglobs –

+2

@mattfreake: To nie jest typeglob, który sprawia, że ​​jest on czytany - tylko, to jest że wskazuje na literał łańcuchowy Perla, który z natury jest niemodyfikowalny. Jeśli mówię '* var_b = \ $ var_a', to zrobiłem' $ var_b' odwołuję się do tego samego miejsca co '$ var_a', który jest do odczytu i zapisu – Borodin

3

* w Perlu oznacza typeglob

Perl używa typ wewnętrznym zwanym typeglob trzymać cały wpis tablicy symboli. Prefiks typu typeglob to *, ponieważ reprezentuje wszystkie typy. Był to preferowany sposób przekazywania tablic i skrótów przez odniesienie do funkcji, ale teraz, gdy mamy prawdziwe odniesienia, jest to rzadko potrzebne.

Głównym zastosowaniem typeglob w nowoczesnym Perlu jest tworzenie aliasów symboli symboli. To zadanie:

*this = *that;

sprawia $this aliasem $that, @this aliasem @that, %this aliasem %that, &this aliasem &that itp Dużo bezpieczniej jest użyć odwołania.

Powiązane problemy