MATLAB: Is this a Possible MATLAB bug? (Further strange Behavior)

ansMATLABtry block

I have encountered a strange behavior while solving one of the problems in Cody. I have simplified the code into the following
function ans = junk(s)
try
s;
catch
999
end
This code gives an error if an output is requested (a=junk(3)), i.e it does not assign s to ans (it does not throw an error, though, within the try block, so adding the catch block has no effect).
The strange part is that if the semicolon is removed or replaced with a comma, it works correctly. Also, if any operation is performed on s (e.g. s+0) it works fine.
If the variable (ans) is invoked within the try block on a separate line after s, it works fine. Strange again, if (ans) is added on the same line as s with a semicolon or a comma, it jumps to the catch block, confirming no assignment in the semicolon case, but not for the comma case which worked fine before.
Any suggestions what causes this behavior? Am I missing something?
UPDATE:
Trying to avoid the try-catch block I tried a switch statement. I encountered further strange behavior of the 'ans' variable. Consider:
function ans = kkk(f,a)
switch nargin
case 1
f;
otherwise
999;
end
This time a=kkk(1) works fine, but when the input is a function handle it errors out
>> a=kkk(1)
a =
1
>> a=kkk(@plus)
Error in kkk (line 2)
switch nargin
Output argument "ans" (and maybe others) not assigned during call to "C:\Users\Dr. K. Hamed\Documents\MATLAB\kkk.m>kkk".

Best Answer

There is a bug but it is the opposite of what you think.
function ans=foo(s)
s;
end
Should error in all cases, a single variable on a line should not assign to ans. Try it from the command line:
5;
s=1;
s;
ans
ans =
5
The bug appears to be in the accelerator, if it is disabled then calling foo will error:
>> feature accel off
>> a=foo(1)
Error in foo (line 2)
s;
Output argument "ans" (and maybe others) not assigned during call to "h:\local\foo.m>foo".