Perl PadWalker не отображает переменные, объявленные с помощью нашего

Возникли проблемы с отладчиком Perl в Eclipse и PadWalker. Раньше использовал его только для простых однофайловых скриптов. Переменные, объявленные с использованием «my». Они отображаются нормально в окне «переменные» отладчика.

Сейчас использую чужой более сложный скрипт и не вижу переменных, объявленных через "наш". Чтобы исследовать, я свел это к одному очень простому примеру.

junk.pl:

use strict;
use warnings;

require 'junk2.pl';

package Junk;
my $simon = "SOMETHING";
print "JUNK  " . $Junk2::james . "\n";
print "JUNK  " . $simon . "\n";

junk2.pl:

package Junk2;
our $james;
$james = "FOO";

1;

При выполнении кода переменная my $simon отображается в окне отладчика нормально, а переменная our $james — нет. Отладчик работает нормально: программа запускается, и окно вывода показывает правильный вывод... это просто окно переменных, которое не показывает $james.

Снимок экрана ниже демонстрирует проблему. Как видите, переменная $james из пакета Junk2 печатается нормально, но не отображается на дисплее переменных.

Просмотр отладчика IDE без переменных пакета

Долго искал решение, но не нашел ничего подходящего... есть идеи?

РЕДАКТИРОВАТЬ: обнаружил, что могу «видеть» переменные пакета, если использую отладчик Perl: Просмотр строки отладчика cmd  .

Есть ли способ получить такой же дружественный вывод в IDE, как показывает padwalker?

Спасибо, ребята, которые ответили до сих пор :)


person Jimbo    schedule 22.08.2013    source источник
comment
Переменные our являются пакетными переменными, т. е. не имеют лексической области действия и не хранятся на пэде.   -  person mob    schedule 22.08.2013
comment
@моб, спасибо. знаете ли вы, есть ли какие-либо другие инструменты/плагины отладки, которые я могу использовать для просмотра этих переменных так же, как переменные с лексической областью видимости?   -  person Jimbo    schedule 22.08.2013
comment
Я не знаком с тем, как использовать Eclipse с Perl. Можете ли вы добавить переменную $Junk2::james в список переменных? Даже небольшая программа будет иметь множество глобальных переменных, определенных в разных пакетах; Eclipse, вероятно, не захочет по умолчанию добавлять их все в список наблюдения за переменными.   -  person mob    schedule 22.08.2013
comment
@mob, переменные, объявленные с помощью our, являются лексическими переменными, хотя эти лексические переменные имеют псевдонимы для переменных пакета.   -  person ikegami    schedule 22.08.2013


Ответы (3)


Вы можете переключать просмотр локальных и глобальных переменных в меню просмотра переменных. Переменные, объявленные с помощью нашего, находятся за пределами локальной области видимости и поэтому видны, когда выбран параметр глобальных переменных. (Я использую затмение 4.2.1)

Чтобы получить доступ к меню просмотра переменных, щелкните маленькую стрелку вниз в правом верхнем углу панели переменных.

person deweytew    schedule 24.10.2014

Переменные, объявленные с помощью our, являются лексическими переменными, имеющими псевдоним для переменных пакета (спасибо @ikegami за исправление):

our создает лексический псевдоним для переменной пакета с тем же именем в текущем пакете для использования в текущей лексической области.

brian d foy опубликовал недавний пост, посвященный таблицам символов.

Короткий ответ: вы получаете доступ к переменным пакета, просматривая таблицу символов пакета.

Кроме того, PadWalker имеет метод peek_our. Package::Stash предоставляет другие полезные помощники.

person Sinan Ünür    schedule 22.08.2013
comment
Спасибо, что нашли время ответить. Существуют ли какие-либо плагины, которые позволили бы мне видеть переменные пакета так же, как я могу просматривать переменные с лексической областью видимости в окне переменных? - person Jimbo; 22.08.2013
comment
Извините, не могу с этим помочь. Я не склонен приближаться к Eclipse. - person Sinan Ünür; 22.08.2013
comment
Переменные, объявленные с помощью our, являются лексическими переменными, хотя эти лексические переменные имеют псевдонимы для переменных пакета. - person ikegami; 22.08.2013

В конфигурации отладки Eclipse в -X командной строке Perl для отображения текущих переменных пакета.

Редактировать:

В этом случае вам может понадобиться вместо этого использовать команду -V. См. http://perldoc.perl.org/perldebug.html.

Редактировать:

Вероятно, было бы проще просто присвоить переменную Junk2::James локальной переменной.

мой $james = $Junk2::james;

person gmlacrosse    schedule 22.08.2013
comment
Привет, спасибо, что нашли время ответить. К сожалению, это не добавило переменные пакета :-S - person Jimbo; 22.08.2013
comment
Возможно, вы поэкспериментировали с командами отладчика perl.perldoc.perl.org/perldebug.html - person gmlacrosse; 22.08.2013
comment
Спасибо, просто делаю это. Похоже, я могу видеть переменные пакета с помощью отладчика командной строки... но мне бы очень хотелось видеть их в среде IDE :) - person Jimbo; 22.08.2013
comment
В среде IDE есть возможность изменить конфигурацию отладки. В eclipse это стрелка вниз на кнопке Debug. Появится текстовое поле для добавления параметров командной строки Perl. - person gmlacrosse; 22.08.2013
comment
Это то, что я пробовал. Боюсь, это не позволило отладчику показать переменные пакета. Хотя была показана дополнительная переменная $[... не знаю почему? - person Jimbo; 22.08.2013
comment
Вы используете эпический плагин? - person gmlacrosse; 22.08.2013
comment
давайте продолжим это обсуждение в чате - person Jimbo; 22.08.2013