При доступе к модулям - PullRequest
1 голос
/ 23 мая 2011

У меня есть вопрос о пакетах, модулях и синтаксисе.Когда вы получаете доступ к пакету в том же файле, я замечаю, что вы используете что-то вроде ....

package test;
$testVar="This is a test";

#and to access it using..

package main;
print($test::testVar);

или просто ...

package test;
print($testVar);

Тем не менее, когда я использую этот синтаксисдля использования с модулем, отправляющим аргумент, я должен опустить $ в начале функции печати, но выше я этого не делаю.Я заметил, что это не сработало иначе, и я не знаю почему.Мои материалы не уточняют.

require module;
print(package::sub("argument"));

Почему это?Я в замешательстве.

1 Ответ

5 голосов
/ 23 мая 2011

Знак доллара здесь - это символ, указывающий, что названная переменная является скаляром.

Если предшествующего объявления package нет, использование $var_name содержит подразумеваемое пространство имен mainт.е. это сокращение от $main::var_name.В случае вашего примера, где у вас сначала package main;, вам нужно указать, что пространство имен test, а не main, поэтому требуется $test::testVar.

Для вызова функцииВам не нужно использовать сигилу.Если бы вы это сделали, вы бы использовали амперсанд (&), но использование амперсандов при вызове функций перестало нравиться многим программистам. *

Как и прежде, sub_name() является сокращенной версией main::sub_name() ... точно так же, для вызова package::sub().

* не требуется никаких символов. * Ссылки на использование &:

...