---
name: "Test::SharedObject"
section: "3pm"
platform: "linux"
package: "libtest-sharedobject-perl"
version: "0.01-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Test::SharedObject"
---

# Test::SharedObject(3pm)

Data sharing in multi process.

## NAME

Test::SharedObject - Data sharing in multi process.

## SYNOPSIS

```
    use strict;
    use warnings;
    use Test::More tests => 2;
    use Test::SharedFork;
    use Test::SharedObject;
    my $shared = Test::SharedObject->new(0);
    is $shared->get, 0;
    my $pid = fork;
    die $! unless defined $pid;
    if ($pid == 0) {# child
        $shared->txn(sub {
            my $counter = shift;
            $counter++;
            return $counter;
        });
        exit;
    }
    wait;
    is $shared->get, 1;
```

## DESCRIPTION

Test::SharedObject provides atomic data operation between multiple process.

## METHODS

- my $shared = Test::SharedObject-\>new($value)

  Creates a new Test::SharedObject instance. And set `$value` as initial value.

  Internally, Creates temporary file, and serialize `$value` by Storable, and save.

- $shared-\>txn(\\&coderef)

  Provides atomic data operation between multiple process in `"\&coderef"`. Set shared value as first arguments in `"\&coderef"`, and return value as new shared value.

  Internally:

  - Lock temporary file.

    - Read shared value.

    - Executes "\\&coderef". (Set shared value as first arguments)

    - Write return value as shared value.

    - Unlock temporary file.

    Good Example:

  ```
      $shared->txn(sub {
          my $counter = shift;
          $counter++; # atomic!!
          return $counter;
      });
  ```

  Bad Example:

  ```
      my $counter;
      $shared->txn(sub {
          $counter = shift;
      });
      $counter++; # *NOT* atomic!!
      $shared->txn(sub {
          return $counter;
      });
  ```

- $shared-\>set($value)

  Set `$value` as shared value. The syntactic sugar for `"$shared->txn()"`.

- my $value = $shared-\>**get()**

  Get shared value. The syntactic sugar for `"$shared->txn()"`.

## LICENSE

Copyright (C) karupanerura.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

## AUTHOR

karupanerura \<karupa@cpan.org\>
