Sharing Information Between Handlers (Perl Cookbook, 2nd Edition)

## 21.13. Sharing Information Between Handlers

### 21.13.1. Problem

You want to share information between handlers, but global variables are global to a process and not automatically cleaned up after every request.

### 21.13.2. Solution

Use Apache pnotes (Perl notes):

>     # in one handler
>     $r->pnotes("Name", $name);

>     # in another handler
>     $name = $r->pnotes("Name");

### 21.13.3. Discussion

Apache modules communicate with each other using notes (see Recipe 21.11). Apache notes act like a hash attached to a request—one handler stores a value for a key in the hash, so that another handler can read it later. The Perl notes features is also a hash attached to the request object, but it's only for the Perl handlers.

To set a pnote, pass a key and a value to the `$r->pnotes` method. To retrieve a pnote, pass only the key. You can store complex data structures:

>     $r->pnotes("Person", { Name => "Nat",
>                            Age  => 30,
>                            Kids => 2 });
>     # later
>     $person = $r->pnotes("Person");

and even objects:

>     $person = new Person;
>     $person->name("Nat");
>     $person->age(30);
>     $person->kids(2);

>     $r->pnotes(Person => $person);

>     # later

>     $person = $r->pnotes("Person");
>     # $person is a reference to the same object

### 21.13.4. See Also

Recipe 8.11 in mod_perl Developer's Cookbook; Apache::Table; pnotes method in the Apache manpage

Copyright © 2003 O'Reilly & Associates. All rights reserved.