Only use the #@...# variable form for the "command" line. Elsewhere just use #...#, except if you're displaying the object name.
#@...# form is for the "displayed" version of the object name, i.e. one a user can type in, or one that is displayed to the user - this could be an alias or one of the "Other Names" set up for the object.
#...# form is for the "internal" version of the object name, i.e. the actual name of the object in QDK.
Also if you want to get the property of an object that's in a variable, use #(variable):property#
command <plant #@_obj#> {
if got <#_obj#> and type <#_obj#; plantable> then {
if ( #(_obj):grows_on# = #(quest.currentroom):land_style# ) then {
msg <you plant the #@_obj#.>
move <#_obj#; garbage>
if type <#_obj#; fruit> then {
select case <#(_obj):frt_type#> {
case <apple> {
clone <treApple1; appleTree%tree_clones%; #quest.currentroom#>
inc <tree_clones>}
} } else msg <Thats not a fruit.> } else {
msg <That won't grow here.> } } else {
msg <You don't have: #@_obj#> }
}