What is the difference between 'my' and 'our' in Perl?

perl, scope

Solution

How does `our` differ from `my` and what does `our` do?

In Summary:

Available since Perl 5, `my` is a way to declare non-package variables, that are:

- private

- new

- non-global

- separate from any package, so that the variable cannot be accessed in the form of `$package_name::variable`.

On the other hand, `our` variables are package variables, and thus automatically:

- global variables

- definitely not private

- not necessarily new

- can be accessed outside the package (or lexical scope) with the qualified namespace, as `$package_name::variable`.

Declaring a variable with `our` allows you to predeclare variables in order to use them under `use strict` without getting typo warnings or compile-time errors. Since Perl 5.6, it has replaced the obsolete `use vars`, which was only file-scoped, and not lexically scoped as is `our`.

For example, the formal, qualified name for variable `$x` inside `package main` is `$main::x`. Declaring `our $x` allows you to use the bare `$x` variable without penalty (i.e., without a resulting error), in the scope of the declaration, when the script uses `use strict` or `use strict "vars"`. The scope might be one, or two, or more packages, or one small block.

Problem

I know what `my` is in Perl. It defines a variable that exists only in the scope of the block in which it is defined. What does `our` do? How does `our` differ from `my`?

Original source

Related problems