Хэш массива Perl - строгие ссылки - PullRequest
0 голосов
/ 26 сентября 2018

это, вероятно, просто для большинства, но у меня есть скрипт на Perl, где я не использую строгий, и использую этот синтаксис:

$welcome_data[$x]{email}       = $data[0];

Работает нормально.Теперь, когда я включаю строгий:

$welcome_data[$x]{email}       = $data[0];
Can't use string ("") as a HASH ref while "strict refs" in use

Может кто-нибудь помочь с тем, что я делаю неправильно ??

Большое спасибо

1 Ответ

0 голосов
/ 26 сентября 2018
$welcome_data[$x]{email}

- это сокращение от

$welcome_data[$x]->{email}

Другими словами, ожидается, что $welcome_data[$x] будет ссылкой (или undef [1] ).Однако в вашем случае он содержал пустую строку.Это как вы делали

${""}{email}

Это явно не то, что вы хотели сделать.Но, к счастью для вас, это именно та ошибка, на которую рассчитаны строгие ссылки.Теперь вы можете исправить все, где вы назначаете пустую строку для $welcome[$x].


  1. Если это undef, Perl будет autovivifiy ссылкой на новуюанонимный хеш для вас, как если бы вы использовали

    ( $welcome_data[$x] //= {} )->{email}
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...