Актуальность объявления переменной в Perl - PullRequest
2 голосов
/ 19 марта 2011

Какое значение имеет объявление переменных в программировании на Perl, когда мы можем изменить содержащееся в нем значение?

например,

my $name ="johny";

В следующем выражении мы можем изменить тип значенияСодержится в нем с:

$name = 10;

Тогда каково значение объявления переменной и как Perl распределяет память по переменным, когда ее тип не фиксирован?

Ответы [ 4 ]

4 голосов
/ 19 марта 2011

Одно из преимуществ объявления переменных состоит в том, чтобы помочь уменьшить количество ошибок, особенно в сочетании с:

use strict;
use warnings;

В этом случае, если вы неправильно наберете имя переменной, Perl скажет вам, что вы ссылаетесьнеобъявленная переменная:

my $name = 'johnny';
print $nane;
3 голосов
/ 19 марта 2011

Вы правы в том, что объявления переменных не нужны для различения целочисленных / float / ... типов, как в C.

Я думаю, что объявления переменных perl не являются инструкциями выделения памяти, а скорее инструкциями пространства именкогда $ name допустимо.Память будет выделена / освобождена по мере необходимости переводчиком.Создание действительно длинной строки в $ name приведет к тому, что для нее будет выделено больше памяти.

Объявление переменной с помощью «my $ var» делает ее локальной для текущей области.Без объявления «my» это глобальная переменная.Обычно подпрограммы должны объявлять любые переменные, которые они используют, с помощью «my», чтобы избежать загрязнения глобального пространства имен.Для получения дополнительной информации прочтите документацию perlsub .

Если объявленная переменная может влиять на производительность, так как это может привести к уничтожению / повторному созданию переменной, как обсуждено здесь .

2 голосов
/ 19 марта 2011

Существует несколько причин для объявления переменной.

  • Чтобы объявить область видимости переменной.

    {
      my $salutations = "hello\n";
    }
    print $salutations; # undef
    
  • Чтобы поймать опечатки при использовании с use strict;.

    use strict;
    my $salutations = "hello\n";
    print $_salutations;
    # Global symbol "$_salutations" requires explicit package name ...
    

    Именно поэтому рекомендуется ставить use strict; в начале ваших программ.

  • Для повторного использования имени переменной в новом блоке, не затрагивая включающий блок.

    my $salutations = "hello\n";
    {
      my $salutations = "hi there\n";
      print $salutations;
      # prints: hi there
    }
    print $salutations;
    # prints: hello
    
0 голосов
/ 19 марта 2011

Использование специальных переменных и безвозмездной авививизации приводит к зависимости от черной магии.Кроме того, это влияет на область видимости переменных, что усложняет отслеживание потока программ и, следовательно, усложняет обслуживание и отладку.

К другой части вашего вопроса типы данных Perl - скаляр, массив и хэш.В отличие от языков более низкого уровня или некоторых других языков с более строгой типизацией, примитивные типы данных на самом деле не вступают в игру.Относительно того, как это фактически обрабатывается внутри компилятора / интерпретатора, я не уверен на 100%, но хорошее место для начала может быть здесь: http://dev.perl.org/perl5/docs/perlhack.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...