The majority of FCM functionalities are provided by a set of Perl modules. Old modules developed prior to release 2-0 reside in the FCM1::* name-space. Modules developed thereafter reside in the FCM::* name-space. These are sub-divided into the following name-spaces:


Provides an internal object class framework.

The majority of the classes in the FCM::* name-space are sub-classes of either FCM::Class::CODE or FCM::Class::HASH. The former creates classes that are blessed CODE references, and is intended for configurable functional (i.e. mostly stateless) objects. The latter creates classes that are blessed HASH references, and is intended for data objects.

Note: In theory, we could use the standard module Class::Struct or the modern MOOSE framework. The problem is that the former is not powerful enough to give us what we need, and the latter is not a standard module and is too heavy weight for our intends and purposes. Instead, the developer decides that it is easier to go for a light weight and in house solution.


Provides the logic and configuration of the command line interface (CLI).

It is made up of the following components:

Logic to provide help and invoke functions of FCM::System.
CLI exception.
CLI option parser and configuration.
Help files for the CLI commands.

Provides the data structures for storing the run time contexts.

The objects of these classes do very little, but they provide the data structures that define the states of the program at run time.


Provides the base class for exceptions.


Provides a fa├žade to the functionalities of the FCM system.

The actual implementation is delegated to the following:

The code management system. Currently a thin adapter to FCM1::Cm.
Miscellaneous functions, e.g. browse, cfg-print, keyword-print.
Thin adapter to the old extract and build systems.
The logic of the FCM make system.
FCM make: build system logic.
FCM make: build system components: File type and task specific logic.
FCM make: extract system logic.
FCM make: mirror system logic.
FCM make: preprocess system logic, actually a configuration of FCM::System::Make::Build.
Shared logic between all subsystems in FCM::System::Make::*.

Provides supporting utilities.

Functionalities include:

  • abstract utilities for SVN URLs and file system paths.
  • configuration file reader.
  • event handler.
  • file utilities.
  • message report.
  • name space utilities.
  • shell invocation.
  • multi-process task runner.
  • timer.

The logic of the more complex utilities are delegated to modules in the FCM::Util::* name space.

Note: The majority of modules in the old FCM1::* name space are considered deprecated, with the exception of FCM1::Cm and those providing support functionalities for it. The functionalities of these modules will eventually be absorbed into the FCM::System::CM framework.

Copyright © 2006-2021 British Crown (Met Office) & Contributors. Met Office. See Terms of Use.
This document is released under the British Open Government Licence.