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`?