Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. foreach my $key (keys %$ad_grp_ref) {
...
}
Perl::Critic
и Daxim рекомендуют стиль
foreach my $key (keys %{ $ad_grp_ref }) {
...
}
из соображений удобочитаемости и обслуживания (так что вам не нужно думать о том, что изменить, когда вам нужно использовать %{ $ad_grp_obj[3]->get_ref() }
вместо %{ $ad_grp_ref }
)
Как уже говорили другие, вы должны разыменовать ссылку. Функция keys
требует, чтобы ее аргумент начинался с % :
Мои предпочтения:
foreach my $key (keys %{$ad_grp_ref}) {
Согласно Конвею :
foreach my $key (keys %{ $ad_grp_ref }) {
Угадай, кого ты должен слушать ...
Возможно, вы захотите прочитать Справочную документацию по Perl .
Если вы обнаружите, что делаете много вещей со ссылками на хэши и хэши списков и списков хэшей, вы можете подумать об использовании объектно-ориентированного Perl . В документации по Perl есть много хороших маленьких учебников .