What is the difference between parent and base in Perl 5?

PerlSubclassPragma

Perl Problem Overview


There appears to be a new pragma named parent that does roughly the same thing as base. What does parent do that warrants a new (non-core) module? I am missing something?

Perl Solutions


Solution 1 - Perl

base tried to do one too many things – automatically handling loading modules but also allowing establishing inheritance from classes already loaded (possibly from a file whose name wasn't based on the module name). To sort of make it work, there was some hackery that caused surprising results in some cases. Rather than break backwards compatibility, a new, replacement pragma parent was introduced with cleaner semantics.

parent will be a core module as of 5.10.1.

Update: forgot that base handles fields (if you are using the fields pragma), which parent doesn't do.

Solution 2 - Perl

Armed with the extra bit of information from ysth, I was able to see the differences in the docs:

The base pragma does the following things:

  • adds the named package to @ISA
  • loads the module with the same name as the named package using require (unless it detects that the package has already been loaded)
  • won't fail if a module with the same name as the package doesn't exist
  • dies if there are no symbols in the named package
  • if $VERSION does not exist in named package, base sets it to "-1, set by base.pm"
  • initializes the fields of the named package if they exist
  • does not call the import function of the named package

The parent pragma does the following things:

  • adds the named package to @ISA
  • loads the module with the same name as the named package using require
  • accepts an option that tells it not to die if a module with the same name as the package doesn't exist

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionChas. OwensView Question on Stackoverflow
Solution 1 - PerlysthView Answer on Stackoverflow
Solution 2 - PerlChas. OwensView Answer on Stackoverflow