---
name: "Rex::Shared::Var"
section: "3pm"
platform: "linux"
package: "rex"
version: "1.16.0-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Rex::Shared::Var"
---

# Rex::Shared::Var(3pm)

Share variables across Rex tasks

## NAME

Rex::Shared::Var - Share variables across Rex tasks

## DESCRIPTION

Share variables across Rex tasks with the help of Storable, using a `"vars.db.$PID"` file in the local directory, where `$PID` is the PID of the parent process.

## SYNOPSIS

```
 BEGIN {                           # put share in a BEGIN block
   use Rex::Shared::Var;
   share qw($scalar @array %hash); # share the listed variables
 }
```

## LIMITATIONS

Currently nesting data structures works only if the assignment is made on the top level of the structure, or when the nested structures are also shared variables. For example:

```
 BEGIN {
   use Rex::Shared::Var;
   share qw(%hash %nested);
 }
 # this doesn't work as expected
 $hash{key} = { nested_key => 42 };
 $hash{key}->{nested_key} = -1; # $hash{key}->{nested_key} still returns 42
 # workaround 1 - top level assignments
 $hash{key} = { nested_key => 42 };
 $hash{key} = { nested_key => -1 };
 # workaround 2 - nesting shared variables
 $nested{nested_key}      = 42;
 $hash{key}               = \%nested;
 $hash{key}->{nested_key} = -1;
```

## METHODS

### share

Share the passed list of variables across Rex tasks. Should be used in a `"BEGIN"` block.

```
 BEGIN {
   use Rex::Shared::Var;
   share qw($error_count);
 }
 task 'count', sub {
   $error_count += run 'wc -l /var/log/syslog';
 };
 after_task_finished 'count', sub {
   say "Total number of errors: $error_count";
 };
```
