Вы смешиваете старый синтаксис («стенография») и новый синтаксис, и это путает вещи.
Когда вы пишете call segment_allowed segment_label$
, вы используете «стенографию», и в этом (устаревшем) синтаксическом стиле переменные стиля не будут автоматически интерполированы. Если вы хотите использовать этот стиль, напишите
call segment_allowed 'segment_label$'
для принудительной интерполяции.
Гораздо лучший способ сделать это - использовать новый синтаксис (который вы используете в определении своей процедуры), который делает гораздо более разумную интерполяцию переменных. Используя этот новый синтаксис (доступный примерно от версии 5.4), ваш запрос процедуры должен быть
@segment_allowed: segment_label$
, который должен делать то, что вы хотите.
Как и в сторону, переводя текущий вызов процедуры в этот новый синтаксис, который легче понять, что вы звонили было
@segment_allowed: "segment_label$"
Также отметим, что from 1
в течение циклов является излишним, так как это по умолчанию. И если вам интересно узнать, есть ли этот сегмент или нет, вы можете выйти из цикла, когда совпадение найдено, как это (я также изменил ваш i
на .i
, чтобы все было в порядке):
procedure segment_allowed: .segment$
appendInfoLine: "The argument I got was: ", .segment$
.yes = 0
for .i to allowed_segments_size
if allowed_segments$[.i] = .segment$
.yes = 1
.i += allowed_segments_size
endif
endfor
endproc