2016-05-19 3 views
1

Для этого крошечного кода он всегда печатает значения @x в глобальном блоке кода. Как выпустить предупреждение, если я случайно не инициализирую переменную внутри подпрограммы без «my @x». Я не хочу использовать локальную переменную в подпрограмме как @x.Локальная глобальная проблема подпрограммы Perl

use strict; 
use warnings; 
my @x=qw/1 2 3/; 

&mysub(); 

sub mysub{ 

    print "@x"; 
} 
+0

Я не согласен с закрытым голосованием. Это не совсем ясно. Я просто боюсь. – simbabque

+0

Perl6 может это сделать. [Это] (https://perl6advent.wordpress.com/2014/12/10/day-10-introspecting-the-symbol-tables/) выглядит довольно аккуратно. – simbabque

+1

Пожалуйста, не вызывайте подпрограммы с помощью '&'. Это никогда не нужно. –

ответ

6

С помощью обычного Perl вы не можете этого сделать. Решение равно , чтобы не использовать одно и то же имя переменной в меньших масштабах.


Если вы хотите обеспечить это программно, вы можете использовать Perl::Critic. В политике Perl::Critic::Policy::Variables::ProhibitReusedNames указано, были ли вы повторно использованы имена переменных, которые уже определены во внешней области.

+0

Согласен, но очень распространенные имена переменных, такие как $ t, $ n, $ count и т. Д., Могут случайно закрасться. Есть ли способ или модуль, чтобы проверить это? –

+0

@ Смотрите мое обновление. – simbabque

+1

Не используйте имена переменных с одной буквой. Получите привычку использовать самый узкий масштаб, который вы можете. (Например, текущий блок кода, если это вообще возможно). – Sobrique

0
  1. Организуйте свой код лучше.

    use strict; 
    use warnings; 
    
    sub mysub{ 
        print "@x"; 
    } 
    
    { 
        my @x=qw/1 2 3/; 
        mysub(); 
    } 
    

    Правильно локализуя переменные, нет никакого изменения в случайном обращении к неправильному.

  2. Не используйте такие бессмысленные имена переменных.

    Существует мало шансов получить доступ к @frobs_by_name случайно.

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

  • Нет связанных вопросов^_^