Объявление переменной в блоке BEGIN - PullRequest
10 голосов
/ 16 февраля 2012

В сценарии, подобном следующему, возможно ли, не опуская 'my', эффективно объявить 'var' только один раз и сделать его видимым вне блока BEGIN?

echo -e "\n\n\n" | \
  perl -lne 'BEGIN { my $var="declared & initialized once" } print $var'

Кроме того, зачем объявлять var без«my» делает его видимым вне блока BEGIN?

Ответы [ 2 ]

14 голосов
/ 16 февраля 2012

Поместите my $var; перед блоком BEGIN:

$ perl -le 'my $var; BEGIN { $var = "declared"; } print $var;'
declared

my дает переменную лексическую область видимости, поэтому $var не определено в вашем примере вне блока BEGIN.Удаление my фактически превращает его в глобальную переменную, которая становится доступной в сценарии после назначения.

2 голосов
/ 16 февраля 2012

Кроме того, почему объявление var без 'my' делает его видимым за пределами блока BEGIN?

Вы не объявляете его тогда.Он автоматически объявляется как глобальный, если вы не используете use strict (что по умолчанию запрещает объявление).В однострочнике strict причиняет боль больше, чем помогает;Я в полном порядке, если не делаю декларацию в таком контексте.

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