[ic] User Defined Tags - problem

Ryan Hertz interchange-users@interchange.redhat.com
Mon Apr 29 19:46:01 2002


At 09:01 AM 4/30/02 +0930, Alma Nuker wrote:
>Hi list;
>
>I have my own defined tag that look like this:
>
>UserTag get-license Order email CompanyName CompanyAddress URLLimit
>HostIPAddr IssueDate ExpiryDate SerialNumber MappingLimit Evaluation
>UserTag get-license-temporary AddAttr
>UserTag get-license-temporary Documentation <<EOD
>
>usage: [get-license-temporary  email  CompanyName CompanyAddress
>URLLimit HostIPAddr IssueDate ExpiryDate SerialNumber MappingLimit
>Evaluation]
>
>Gets a license number from the license server
>EOD
>
>UserTag get-license-temporary Routine <<EOR
>use Socket;
>sub {
>  my (    $email, $CompanyName, $CompanyAddress,
>   $URLLimit, $HostIPAddr,
>          $IssueDate, $ExpiryDate, $SerialNumber, $MappingLimit,
>$Evaluation,
>   $opt ) = @_;
>
>  my $licensehost = "licenseserver";
>  my $licenseport = "2201";
>
>
>if ($MappingLimit == ""){
>    my $licensestr = "\
>         CONTACT-EMAIL=$email\
>         COMPANY-NAME=$CompanyName\
>         COMPANY-ADDRESS=$CompanyAddress\
>         URL-LIMIT=$URLLimit\
>         HOST-IP-ADDRESS=$HostIPAddr\
>         ISSUE-DATE=$IssueDate\
>         EXPIRY-DATE=$ExpiryDate\
>         SERIAL-NUMBER=$SerialNumber\
>         EVALUATION=$Evaluation\
>         ";
>}
>else{
>          my $licensestr = "\
>         CONTACT-EMAIL=$email\
>         COMPANY-NAME=$CompanyName\
>         COMPANY-ADDRESS=$CompanyAddress\
>         URL-LIMIT=$URLLimit\
>         HOST-IP-ADDRESS=$HostIPAddr\
>         ISSUE-DATE=$IssueDate\
>         EXPIRY-DATE=$ExpiryDate\
>         SERIAL-NUMBER=$SerialNumber\
>         MAPPING_LIMIT=$MappingLimit\
>         EVALUATION=$Evaluation\
>         ";
>}
>   my $iaddr = inet_aton($licensehost);
>    my $paddr = sockaddr_in($licenseport,$iaddr);
>    my $proto = getprotobyname('tcp');
>
>    socket(SOCK,PF_INET,SOCK_STREAM,$proto) || return undef;
>    connect(SOCK,$paddr) || return undef;
>    print SOCK $licensestr;
>    print SOCK "\0";
>    my $fh = select SOCK;
>    $| = 1;
>    select $fh;
>
>
>    my $signed_license = '';
>    my $buf = '';
>
>    my $line;
>    while (defined($line = <SOCK>)) {
>         $signed_license .= $line;
>         }
>    close(SOCK) || return undef;
>
>    return $signed_license;
>
>}
>EOR
>
>
>I am getting following error message:
>
>UserTag 'get_license_temporary' subroutine failed compilation:
>
>   Global symbol "$licensestr" requires explicit package name at (eval
>109) line 25, <GLOBAL> line 74.
>
>In line 74 of the configuration file
>'usertag/get_license_temporary.tag':
>UserTag get-license-temporary Routine <<EOR
>
>
>I defined this tag as get_license_temporary.tag in
>/usr/lib/interchange/usertag
>
>As soon as I remove if  and else statments works perfect ie if I have



Alma,  I'm a bit rusty in Perl, but I believe that if you use "my 
$licensestr" inside an IF, isn't the var then only local to that 
statement?  Is that the problem?  Try removing the "my".

Otherwise, consult some perl references, as I think that's the direction.