Твое выражение
("otdmark"||"menmen"||"made"||"zrekl"||"markua"||"prmeneger"||"btl"||"marrek"||"novmark"||"marisua"||"marketolog")
Полностью эквивалентно "otdmark", а если написать:
(""||"otdmark"||"menmen"||"made"||"zrekl"||"markua"||"prmeneger"||"btl"||"marrek"||"novmark"||"marisua"||"marketolog")
То как не странно получим тотже результат "otdmark".
Оператор || работает следующим образом: если левое выражение true (не пустая строка, и не нуль), то правое не вычисляется. В качестве результата будет последнее вычисленное выражение, то есть в первом случае "otdmark" - true, результат otdmark, во втором "" - false, "otdmark" - true => "otdmark".
Необходимо было написать:
$smi eq "" or $smi eq "otdmark" or $smi eq "menmen" ...
Намного элегантнее будет решение с хешем, создаем скажем вот такой хеш:
%hash = (
"" => 1,
otdmark => 1,
menmen => 1,
...
);
А проверка тогда будет очень простой:
if ($hash{$smi})
{ &htmlup; require "./smi.cgi"; }
else { print qq[Location: $script\\n\\n]; }