Это один вопрос, в котором Perl полностью уклоняется от вопроса.
Переменные всегда имеют одну из $%@*&
, единственные вещи, которые могут конфликтовать, это Globs / Handles и подпрограммы.
Даже это не составляет большой проблемы, потому что Globs / Handles больше не используются.
Подпрограммы и ключевые слова практически одинаковы в Perl. Если вам нужно получить встроенную подпрограмму / ключевое слово, вы можете получить ее, добавив CORE::
, например CORE::dump
.
Действительно, я думаю, что единственные ключевые слова, с которыми у вас возникнут проблемы, - это sub
, my
, local
и 'наш', потому что эти ключевые слова анализируются очень рано в синтаксическом анализаторе. Обратите внимание, что вы все еще можете создать подпрограмму с этими именами, она просто не будет работать без указания полного имени, или из благословенной ссылки, или с символической ссылкой.
{
package test;
sub my{ print "'my' called using $_[-1]\n" };
sub new{ bless {}, $_[0] };
sub sub{ print "'sub' called using $_[-1]\n" };
sub symbolic{
*{__PACKAGE__.'::'.$_[1]}{CODE}->('symbolic reference');
}
my $var; # notice this doesn't call test::my()
}
package main;
my $test = test->new;
# Called from a blessed reference
$test->my('blessed reference');
$test->sub('blessed reference');
print "\n";
# Called using the full name
test::my('full name');
test::sub('full name');
print "\n";
# Called using a symbolic reference
$test->symbolic('my');
$test->symbolic('sub');
Выход:
'my' called using blessed reference
'sub' called using blessed reference
'my' called using full name
'sub' called using full name
'my' called using symbolic reference
'sub' called using symbolic reference