I do not understand the scope of channel variables, when are they accessible ?

For example, I am looking for the sip username of the caller call leg.

In this example ${sip_auth_username} is empty when logging or calling sf_update.pl but it is correct when calling sf_hangup.pl

<include>
        <extension name="outdialing">
                <condition field="destination_number" expression=".*)">
                        <action application="answer"/>
                        <action application="log" data="VARIABLES [${sip_auth_username}][${Caller-Username}][${sip_from_user}][${effective_caller_id_name}][${effective_caller_id_number}]"/>
                        <action application="perl" data="/var/fs_hook/sf_update.pl ${sip_auth_username} ${sip_to_user}"/>
                        <action application="set" data="api_hangup_hook=perl /var/fs_hook/sf_hangup.pl  ${sip_auth_username} ${sip_to_user} "/>
                        <action application="bridge"  data="{absolute_codec_string='PCMA,PCMU,G729',call_leg=B,session_in_hangup_hook=true'}sofia/gateway/XXXX/XXXX$1"/>

                 </condition>
</extension>
</include>