ルールの意味をわかりやすく説明するサンプルコード

my $userdata = {};
$userdata->{test} = 1; ← @ 格納した情報を
require 'test.pl'
Test::testsub
 ({
 config => $config,
 userdata => $userdata,
 log_error => $log_error,
 log_alert => $log_alert,
 status => $status,
 });
print $userdata->{test}; ← 出力は 2 C サブルーチン内で書き換えた内容がちゃんと保持されている
exit;

sub test
 {
 my $argument = shift;
 my $config = $argument->{config};
 my $userdata = $argument->{userdata}; ← A サブルーチン内のローカル変数に格納して
 my $log_error = $argument->{log_error};
 my $log_alert = $argument->{log_alert};
 my $status = $argument->{status};
 $userdata->{test} = 2; ← B 書き換えているが
 }