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 line,

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

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

3 ответа

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

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

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

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

Брайан Д. Фой недавно опубликовал пост, в котором обсуждаются таблицы символов.

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

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

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

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

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

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

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

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

Другие вопросы по тегам