Home > Software engineering >  Understanding fully qualified names in Perl packages
Understanding fully qualified names in Perl packages

Time:01-03

I'm trying to understand some code from CGI.pm, specifically:

package CGI::MultipartBuffer;
....
$MultipartBuffer::INITIAL_FILLUNIT ||= 1024 * 4;
...
$INITIAL_FILLUNIT = $MultipartBuffer::INITIAL_FILLUNIT;

What I need to know is the fully qualified names of $MultipartBuffer::INITIAL_FILLUNIT and $INITIAL_FILLUNIT as in my interpretation they should both be $CGI::MultipartBuffer::INITIAL_FULLUNIT but I must be mistaken as otherwise why would the second assignment statement be needed?

CodePudding user response:

$INITIAL_FILLUNIT isn't declared, so it's a package variable.[1] Since the current package is CGI::MultipartBuffer, it refers to $CGI::MultipartBuffer::INITIAL_FILLUNIT.

This means that

$INITIAL_FILLUNIT = $MultipartBuffer::INITIAL_FILLUNIT;

means

$CGI::MultipartBuffer::INITIAL_FILLUNIT = $MultipartBuffer::INITIAL_FILLUNIT;

  1. This would be forbidden by use strict;.
  • Related