开发者

Invalid command name in Tcl when using format

开发者 https://www.devze.com 2023-03-10 10:17 出处:网络
I\'m running the following commands set full_pin_name [format \"%s %s\" $top_cell $encoded_name] puts \"full_pin_name is $full_pin_name\"

I'm running the following commands

set full_pin_name [format "%s %s" $top_cell $encoded_name]
puts "full_pin_name is $full_pin_name"

and I get the following error:

full_pin_name is invalid co开发者_StackOverflowmmand name "A" B

when top_cell equals A and encoded_name equals B.

Why is this happening?


I suspect the problem is with your $top_cell variable, which has the value invalid command name "A". To check, try the following line before your format line:

puts ">$top_cell<"

If indeed, $top_cell value has a problem, you can then trace back to the last set command. Let us know if it fixes your problem, or we might try some other approaches.


Try repeating this in a plain Tcl shell, it works. Something is different in your Tcl shell.

Try

info body set

and

info body format

If either report something other than set isn't a procedure or format isn't a procedure then you have your culprit.


May be this code runs in a namespace which has the set command defined in it? To demonstrate:

% namespace eval foo {
    proc set args {
      puts hey!
    }
    proc whatever {top_cell encoded_name} {
      set full_pin_name [format "%s %s" $top_cell $encoded_name]
      puts "full_pin_name is $full_pin_name"
    }
  }
% ::foo::whatever A B
hey!
can't read "full_pin_name": no such variable
%


As far as I can tell without a TCL interpreter here it should work assuming a normal interpreter with format defined. so it looks like maybe format has been renamed or doesn't exist as a command in the interpreter you are using?

To get you going you don't really need format to join strings anyway

set fill_pin_name "$top_cell $encoded_name"

should so what you need


Maybe your code looks like this:

set encoded_name B  
if { [catch {[A]} top_cell]} {
    set full_pin_name [format "%s %s" $top_cell $encoded_name]
    puts "full_pin_name is $full_pin_name"
}

The result is:

full_pin_name is invalid command name "A" B
0

精彩评论

暂无评论...
验证码 换一张
取 消