Какое значение имеет фигурная скобка для доступа к объекту

#perl

#perl

Вопрос:

Даже не уверен, использовал ли я правильную терминологию.. Это были переданные данные.

 $bug = bless({
'bug_id' => '25252',

'flag_types' => [
    bless({
      'name' => 'name1',
      'flags' => [bless({
        'id' => 488052,
      }, 'Bugzilla::Flag')],
    }, 'Bugzilla::FlagType'), 
    bless({
      'name' => 'name2',
      'flags' => [bless({
        'id' => 488053,
      }, 'Bugzilla::Flag')],
    }, 'Bugzilla::FlagType'), 
  ],

}, 'Bugzilla::Bug');
 

Почему я могу ссылаться name с фигурными скобками или без них, но не на flags ?
$_->flags выдает ошибку

 Can't locate object method "flags"
 
                 my @isCrash = map { 
                    print Dumper($_->name);
                    print Dumper($_->{name});
                    print Dumper($_->flags); # errors
                    print Dumper($_->{flags};                    
                } @{ $bug->{flag_types} };
 

Я понимаю, что flags это не метод, но почему я не получаю такую ошибку name ?

Ответ №1:

Ваш массив содержит объекты типа Bugzilla::FlagType, у них есть метод name , который «Возвращает имя flagtype».

Комментарии:

1. поэтому, когда я это делаю $_->name , он выполняет метод, не имея () в конце? Интересно ..!

2. @PuffedRiceCrackers Perl () в большинстве случаев не требует круглых скобок для вызовов функций или методов. Если вы передаете аргументы в вызов метода, вы должны использовать их, но не для пустых списков аргументов.