Он просто не был написан, потому что это довольно сложно, и заставить его работать для скаляров считалось более важным. Существует опция проверки (Perl_ck_sassign
в op.c
), которая распознает, когда левая сторона присвоения является операцией padsv
, ссылающейся на недавно объявленную переменную state
, и переносит ее в специальную операцию once
, которая гарантирует что назначение происходит только один раз - но оно даже не пытается распознать назначения списка, вероятно, из-за сложности разбиения конструкции типа (state $a, my $b, state $c) = (1, 2, 3)
. Забавно, что, похоже, state @a = qw(blah blah blah)
было бы достаточно просто, и, очевидно, это менее патологический случай, чем другой вариант назначения списка.