in reply to why this funciton is invisible?

You should
use strict; use warnings;
(and diagnostics if the error messages aren't clear enough).

Here's one problem that would've been revealed by strict/warnings

C:\>more client_reg.pl sub hi{print q,hi,} C:\>perl -e" do (client_reg.pl);hi()" Undefined subroutine &main::hi called at -e line 1. C:\>perl -we" do (client_reg.pl);hi()" Unquoted string "pl" may clash with future reserved word at -e line 1. Undefined subroutine &main::hi called at -e line 1. C:\>perl -Mstrict -we" do (client_reg.pl);hi()" Bareword "client_reg" not allowed while "strict subs" in use at -e lin +e 1. Bareword "pl" not allowed while "strict subs" in use at -e line 1. Execution of -e aborted due to compilation errors. C:\>perl -Mstrict -we" do q(client_reg.pl);hi()" hi C:\>
do can also fail to read and execute a file, so you should check for that (you can read more about do in the docs: 'perldoc -f do').

MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
** The third rule of perl club is a statement of fact: pod is sexy.