Name

our

Synopsis

our vars
                  

Declares the listed variables to be valid globals within the enclosing block, file, or eval. vars must be in parentheses if more than one value is used. our( ) has the same scoping rules as a “my” declaration but does not create a local variable. Variables that you create with our( ) will be visible across its lexical scope and may cross package boundaries. Unlike use vars, our( ) is not package scoped; the package in which the variable is entered is determined at the point of declaration, not at the time of use. This means the following behavior holds:

package Foo;
                our $bar;           # Declares $Foo::bar for rest of lexical scope
                $bar = 20;

                package Bar;
                print $bar;         # Prints 20

You my use multiple our declarations in the same lexical scope if they are in different packages. If they are in the same package, Perl will emit warnings if you have asked for them:

use warnings;
                package Foo;
                our $bar;           # Declares $Foo::bar for rest of lexical scope
                $bar = 20;

                package Bar;
                our $bar = 30;      # Declares $Bar::bar for rest of lexical scope
                print $bar;         # Prints 30
                our $bar;           # Emits warning

Get Perl in a Nutshell, 2nd Edition now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.