[SR-Dev] new operators & if($v) behaviour
Andrei Pelinescu-Onciul
andrei at iptel.org
Mon Apr 27 15:55:59 CEST 2009
On Apr 27, 2009 at 11:55, Miklos Tirpak <miklos at iptel.org> wrote:
> Hi,
>
> On 04/24/2009 06:44 PM, Juha Heinanen wrote:
> >Miklos Tirpak writes:
> >
> > > Both of them would return false. Btw, I do not think that empty value
> > is > allowed for to tag, it's a very rare case, and could be covered with
> > > some explicit check.
> >
> >to me to tag was just an example of some variable.
> >
> > > We used to write this, but had lots of issues. The problem happens for
> > > example with @contact.uri.user, when there is no contact header.
> > > Unfortunately the select function can return and error instead of
> > > success with "" value in this case. (The can be also revisited) And 'if
> > > (@contact.uri.user == "")' would evaluate to false because the left had
> > > side value does not exist, which is wrong.
> >
> >this is exactly my point. you have to first check if something exists
> >before you start to compare its value to something.
>
> Yes, this could work, but than we need two checks in most of the cases:
>
> if (defined($v) && ($v != "")) {...}
>
> This is more precise indeed, but the script writer should not forget the
> extra checks.
We could try some sane defaults (for if ($v)).
For example that's what perl does:
undefined "" string 0 other integer
$foo eq undef true true false false false
$foo == undef true true true true false
$foo eq "" true true false false false
$foo == 0 true true true true false
bool($foo) false false true false true
int($foo) 0 0 0 0 I
str($foo) "" "" S "0" "I"
Where string == non empty, non-numeric string.
Strings that contain numbers are automatically converted to their
corresponding interger value, e.g. int("3")=3, but int("a")=int("")=0.
However we are severely impaired by having same comparison and same
addition operators for both strings and intergers.
E.g.: $a == $v is quite messy (what if $a==undef, what to convert $v
to?).
> Regarding SER selects, if we go for this solution, I think we should
> revisit all the select functions. For example @foo.param.abcd should
> return "" only if the 'abcd' parameter of header 'foo' exists, but it's
> value is empty. Than we could simply check the existence of the parameter:
> if (defined(@foo.param.abcd)) {...}
Note: right now defined @select is always true (and undefined select is
always ""), but I'll change that.
Andrei
More information about the sr-dev
mailing list