2014-09-22 2 views
1

В чем разница между определением переменной с помощью * vs a $? Например:

local $var; 
local *var; 
+3

http://perldoc.perl.org/perldata.html#Typeglobs-and-Filehandles – toolic

+2

Кроме того, вы почти наверняка хотите использовать 'my' вместо' local'. – AKHolland

+2

Важно отметить, что типыglobs специфичны для переменных с областью действия пакета, а переменные, объявленные с помощью 'my', не будут иметь ассоциированную запись типаglob или таблицы символов. Документация, относящаяся к этому, очень плотная и гораздо полезнее в качестве ссылочного материала, чем вводный материал. Я рекомендую разговор Брюса Грея [Why 'my'?] (Http://www.youtube.com/watch?v=Ton-5tvDQiE), поскольку он помог мне понять переменные пакета как исторический артефакт Perl, так и конкретные ситуации в которых они по-прежнему полезны (например, для импорта). – Slade

ответ

6

Начальный символ известен как sigil и говорит, какую ценность представляет его идентификатор. Вы узнаете большинство из них. Вот список

  • доллар $ является значением скалярной

  • В знаке @ является массивом значение,

  • Процент % является хэша- значения а

  • Ampers и & является код значение

  • Звездочка * является тип-глобу

Вы, менее вероятно, наткнулись на двух последних в последнее время, потому что & не было необходимости при вызове подпрограммы так как был выпущен Perl 5.0. И typeglobs - особый тип, который содержит все другие типы и используется гораздо реже.

Я рассматриваю, насколько глубже вникать во все это, но оставит свой ответ так, как сейчас. Я могу писать больше в зависимости от комментариев, которые возникают.

7

$var - это скаляр. *var - типglob. http://perldoc.perl.org/perldata.html#Typeglobs-and-Filehandles

Это не переменная в строгом смысле слова. Обычно вы не должны использовать его.

+0

Эй, спасибо! Раньше я никогда не видел типglob, поэтому мне было трудно найти ответ самостоятельно ... – erichar7

Смежные вопросы