Я пытаюсь понять код из CGI.pm, а именно:
package CGI::MultipartBuffer;
....
$MultipartBuffer::INITIAL_FILLUNIT ||= 1024 * 4;
...
$INITIAL_FILLUNIT = $MultipartBuffer::INITIAL_FILLUNIT;
Что мне нужно знать, так это полные имена $MultipartBuffer::INITIAL_FILLUNIT
и $INITIAL_FILLUNIT
, поскольку в моей интерпретации они оба должны быть $CGI::MultipartBuffer::INITIAL_FULLUNIT
, но я должен ошибаться, иначе зачем нужен второй оператор присваивания?
$INITIAL_FILLUNIT
не объявлен, поэтому это переменная пакета.[1] Поскольку текущий пакет CGI::MultipartBuffer
, он ссылается на $CGI::MultipartBuffer::INITIAL_FILLUNIT
.
Это значит, что
$INITIAL_FILLUNIT = $MultipartBuffer::INITIAL_FILLUNIT;
означает
$CGI::MultipartBuffer::INITIAL_FILLUNIT = $MultipartBuffer::INITIAL_FILLUNIT;
use strict;
.Я использую perl -d и Dumper для таблицы символов, и похоже, что $MultipartBuffer::INITIAL_FILLUNIT на самом деле означает $main::MultipartBuffer::INITIAL_FILLUNIT. Я предполагал, что это означает $CGI::MultipartBuffer::INITIAL_FILLUNIT
Re «Что означает $MultipartBuffer::INITIAL_FILLUNIT?» Это переменная. Что ты имеешь в виду?
Что касается «похоже, что $MultipartBuffer::INITIAL_FILLUNIT на самом деле означает $main::MultipartBuffer::INITIAL_FILLUNIT», технически да. Но только потому, что это также $main::main::MultipartBuffer::INITIAL_FILLUNIT, $main::main::main::MultipartBuffer::INITIAL_FILLUNIT, $main::main::main::main::MultipartBuffer::INITIAL_FILLUNIT, и т.д. А на самом деле нет. Это означает $MultipartBuffer::INITIAL_FILLUNIT
Хорошо, спасибо - понял это, посмотрев на хэш таблицы символов. Я предполагал, что это было в пакете CGI, а не в основном пакете. Теперь я исправил это в моей версии Pythonizer для разработчиков.
Я отменил ваше ошибочное редактирование. Пакеты CGI::MultipartBuffer
и MultipartBuffer
. Нет смысла использовать main::CGI::MultipartBuffer
и main::MultipartBuffer
. Еще меньше смысла быть непоследовательным.
Хорошо, не волнуйтесь. Что меня смутило, так это то, что автор CGI использовал пакет CGI::MultipartBuffer (объявленный) и MultipartBuffer (необъявленный) - заставил меня думать, что второй был подпакетом CGI вместо основного.
Опять же, не подпакет main. Это $MultipartBuffer::INITIAL_FILLUNIT
, а не $main::MultipartBuffer::INITIAL_FILLUNIT
Спасибо - что означает $MultipartBuffer::INITIAL_FILLUNIT?