Re: Strange behaviour of PL/Perl
Re: Strange behaviour of PL/Perl
От:
Tom Lane <tgl@sss.pgh.pa.us>
Дата:
"Andrey Y. Mosienko" writes: > I just included PL/Perl language in my database. > Created function: > CREATE FUNCTION and_with_mask(int2, int2) RETURNS int2 AS > [ behaves strangely ] What Postgres version is this, on what platform? Does the function behave more reasonably if you declare the inputs and result as int4? regards, tom lane
Strange behaviour of PL/Perl
От:
"Andrey Y. Mosienko" <feo@ttn.ru>
Дата:
Hello All!
I just included PL/Perl language in my database.
Created function:
CREATE FUNCTION and_with_mask(int2, int2) RETURNS int2 AS
'
return $_[0] &
$_[1]
' LANGUAGE 'plperl';
select and_with_mask(4,1);
and_with_mask
---------------
0
select and_with_mask(8,1);
and_with_mask
---------------
0
select and_with_mask(16,1);
and_with_mask
---------------
1
select and_with_mask(32,1);
and_with_mask
---------------
1
And just in Perl:
#!/usr/bin/perl
$val = 32 &
1;
print("val = $val\n");
val = 0
Where am I mistaken or something is in PL/Perl?
--
with respection Andrey Feofilactovich.
e-mail: feo@ttn.ru, feo@feo.org.ru
ICQ: 28073807
Re: Strange behaviour of PL/Perl
От:
Richard Huxton <dev@archonet.com>
Дата:
"Andrey Y. Mosienko" wrote:
>
> Hello All!
>
> I just included PL/Perl language in my database.
> Created function:
>
> CREATE FUNCTION and_with_mask(int2, int2) RETURNS int2 AS
> '
> return $_[0] &
> $_[1]
> ' LANGUAGE 'plperl';
> select and_with_mask(32,1);
> and_with_mask
> ---------------
> 1
> #!/usr/bin/perl
> $val = 32 & 1;
> print("val = $val\n");
>
> val = 0
>
> Where am I mistaken or something is in PL/Perl?
perl -e 'print ("32" & "1"),"\n"'
Values are being passed in as strings so perl is doing bitwise string
operation (perldoc perlop). Convert to numbers by doing +0 or similar.
- Richard Huxton