Forum Discussion

Steve_Brown_882's avatar
Steve_Brown_882
Historic F5 Account
Aug 12, 2011

Issue with scan commend?

I am working on what should be a really simple irule, but for some reason I cannot get the scan command to work. I have simplified the entire rule down to the following code to trouble shoot.

 

 

when HTTP_REQUEST {

 

set hh [string tolower [HTTP::host]]

 

log local0.info "$hh"

 

scan $hh %s.%s.%s.%s h1 h2 h3 h4

 

log local0.info "$h1 $h2 $h3 $h4"

 

}

 

 

The first log statement works and produces a log with something in the format of "sub.host.domain.suf" but I get an error when the second log fires.

 

 

TCL error: sample_scan - can't read "h2": no such variable while executing "log local0.info "$h1 $h2 $h3 $h4""

 

 

I am just formatting the scan wrong?

 

  • Colin_Walker_12's avatar
    Colin_Walker_12
    Historic F5 Account
    Muhammad's got it right, although you'd need one more iteration if you wanted 4 sections. The reason that your %s wasn't working is that it is greedy and eats up everything until the next space, including the "." characters.

    From the reference:

    "

    s

    The input field consists of all the characters up to the next white-space character; the characters are copied to the variable."

    So in your case, to grab all four sections, you'd want something like:

    scan $hh {%[^.].%[^.].%[^.].%[^.]}

    tclsh testing:

    
    
    % set hh sub.host.domain.suf
    sub.host.domain.suf
    % scan $hh {%[^.].%[^.].%[^.].%[^.]}
    sub host domain suf
    % 
    

    Keep in mind you could replace the last [^.] with a %s in case you end up with more than four chunks.

    Colin