PL/1 is a block-structured language. The outermost block, the external Procedure provides the shell for all code ands data. Other blocks, Procedures, which are executed only as subroutines or funtions, and Begin-Blocks, which are executed inline can be nested to any depth. Data declared within a block has a "scope" consisting of the block within which an extremely flexible and convenient referencing scheme. Newer PL/1 have introduced the concept of the "Package" which is an additional level of structuring which allows a number of External Procedures to share common data while hiding it from outside.