share variables in perl script (rlm_perl)

laurent.feron at laurent.feron at
Tue Dec 4 15:30:14 CET 2012

Hello, thanks for your respond. I tried memcached as suggested by John Denins. Seems working very well.
i thought of Redis, if memcached does not satisfied me (i don't see), Redis could be an option.
In term of security, i have to be sure that information in memcached can be secured, and not public.

----- Mail original -----
De: "Iliya Peregoudov" <iperegudov at>
À: "FreeRadius users mailing list" <freeradius-users at>
Envoyé: Mardi 4 Décembre 2012 08:14:13
Objet: Re: share variables in perl script (rlm_perl)

Arran Cudbard-Bell wrote:
> On 29 Nov 2012, at 22:14, laurent.feron at wrote:
>> Hello,
>> In a perl script (where authorize() and authenticate() are defined), i was able to set a global variable. when a radius request comes, the script may modify the variable, and the next request has the new value. I test with radiusd -X, and everything is fine.
>> when radiusd is started as a daemon, 5 threads (default value) are started. And now, i understood i have 5 different perl "environments".
>> Meaning, when i start the first radtest that modifies the global variable, only the sixth request can view the global variable modified by the first request( i guess the sixth one turns into the first thread).
>> I hope my explanation is clear. I would like to know if it possible to have a unique sharing enviroment (the basic solution is maybe to have only one thread, but it should be good for performance)
> No, submit patches if you want this functionality.

You can explicitly share data between perl interpreters. However you'll 
need to explicitly lock shared data. See perldoc threads::shared for 

use threads;
# this module contains share() and lock()
use threads::shared;

# hashes get empty on share
my %sharedhash;

sub put($$) {
    my ($key, $value) = @_
    $sharedhash{$key} = share($value);
sub get($) {
    my ($key) = @_;
    my $value = $sharedhash{$key};
    return $value;

But I think it's better to store shared data in some sort of storage, 
for example redis or sql database.

List info/subscribe/unsubscribe? See

More information about the Freeradius-Users mailing list