note
jwkrahn
<p>
You seem to be confused about references:
</p>
<blockquote><i><c>
$RESULT = &getdata(\%DATA,\%CONFIG,\%STATIC); ##read config-file
...
if ($PROTO =~ m/ssh/i){
%DATA = &connect2cpe_SSH(\%DATA,\%CONFIG,\%STATIC);
}else{
%DATA = &connect2cpe_TELNET(\%DATA,\%CONFIG,\%STATIC);
}
</c></i></blockquote>
<p>
You are calling those functions with references to three hashes but only in getdata() do you actually dereference those hashes:
</p>
<blockquote><i><c>
$STATIC->{$T[0]}=$T[1];
...
$DATA{$IP}->{COMMANDS} = \@COMMANDS;
$DATA{$IP}->{MATCHES} = \@MATCHES;
</c></i></blockquote>
<p>
Otherwise you are just modifying the file scoped hashes.
</p>
<p>
And then for connect2cpe_SSH() and connect2cpe_TELNET() you copy the already modified <c>%DATA</c> back to itself? Whether you modify <c>%DATA</c> directly or through a reference there is no need to copy it to itself.
</p><br /><br />
<blockquote><i><c>
if ($#ARGV < 0 ) { &help($0); exit 0;}
...
'help|h' => sub { &help($0); exit 0;}
) || die(&help($0));
</c></i></blockquote>
<p>
help() returns a value but you never use that value so why return it? You pass the <c>$0</c> variable to help() but because you import help() into the current program the <c>$0</c> variable is directly available inside help(). Every time you use help() you exit the program. Perhaps you should put an [doc://exit] at the end of the help() subroutine and maybe call it "print_help_and_exit"?
</p>
1054837
1054837