Как проверить объект был создан в Perl? - PullRequest
2 голосов
/ 18 мая 2011

В моем скрипте что-то вроде

my $region = $self->Functiontofind( $tag );

my $value1 = $region->getValue1;
my $value2 = $region->getValue2;

$ region - это объект, в некоторых случаях $ region может быть пустым, т. Е. Если тег пуст, я хочу проверить, пуст ли объект или нет. Как мы можем это сделать.

if (defined ($region)) не похоже на работу.

Спасибо

Ответы [ 4 ]

3 голосов
/ 18 мая 2011

Вы должны проверить, какие значения могут быть возвращены Functiontofind, это может быть: 0 = ошибка, 1 = успех и т. Д.

, как уже упоминалось, в идеале, его undef для не созданных(как вы выразились).

Кстати, я не думаю, что это имеет отношение к этому посту, но это напоминает мне полезность Moose * Предиката и более ясных методов , которые очень полезны дляявно различать ложное или неопределенное значение атрибута и атрибут, который не был установлен.

1 голос
/ 18 мая 2011

если Functiontofind возвращает что-то отличное от undef, когда ничего не найдено, вам придется выяснить, что он возвращает в этом случае, и построить свой тест на этом. Если это все еще какой-то объект, но другого типа, ref может подойти или, возможно, isa (из UNIVERSAL ).

Но ваш модуль может просто вернуть объект того же класса, но с некоторыми пустыми атрибутами. Возможно, вам придется проверить это ... В этом случае я бы предложил добавить метод, чтобы проверить, является ли объект этого класса пустым.

1 голос
/ 18 мая 2011

Попробуйте:

use Data::Dumper;
print Dumper $region;

Это скажет вам, что такое $region.

Я подозреваю, что это сработает:

use Scalar::Util;
if( defined( $region ) && ref( $region ) && blessed( $region )){

См:

Данные perldoc :: Dumper

perldoc Scalar :: Util и поиск / blessed /

0 голосов
/ 18 мая 2011

В идеале, я бы Functiontofind вернул что-то всегда , а затем использовал бы метод $region, например isEmpty или что-то еще, чтобы решить, является ли он пустым или нет, вместо того, чтобы ничего не возвращать, если нет соответствия был найден. Однако, если вы хотите, вы можете проверить, является ли $region == undef, чтобы увидеть, не определено ли оно.

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