The same operators as for the arithmetical operations can also be used on some other data types. For example, by "adding" two arrays you can concatenate them: ({ 7, 6, 3 }) + ({ 6, 19 }) gives the result ({ 7, 6, 3, 6, 19 }).

Here is a complete table of what happens when you use the arithmetic operators with values of the various types in Pike:

OperationReturned typeresult

int + int

int

the sum of the two values

float + int
int + float
float + float

float

the sum of the two values

string + string
int + string
float + string
string + int
string + float

string

In this case, any int or float is first converted to a string. Then the two strings are concatenated and the resulting string is returned.

array + array

array

The two arrays are concatenated into a new array and that new array is returned.

mapping + mapping

mapping

A mapping with all the index-value pairs from both mappings is returned. If an index is present in both mappings the index-value pair from the right mapping will be used.

multiset + multiset

multiset

A multiset with all the members from both multisets is returned.

int - int

int

The right value subtracted from the left.

float - int
int - float
float - float

float

The right value subtracted from the left.

string - string

string

A copy of the left string with all occurrences of the right string removed.

array - array

array

A copy of the right array with all elements present in the right array removed. Example: ({2,1,4,5,3,6,7}) - ({3,5,1}) will return ({2,4,6,7}).

mapping - mapping

mapping

A new mapping with all index-value pairs from the left mapping, except those indexes that are also present in the right mapping.

multiset - multiset

multiset

A copy of the left multiset without any member present in the left multiset.

int

int

Same as 0 - int.

float

float

Same as 0 - float.

int * int

int

the product of the two values

float * int
int * float
float * float

float

the product of the two values

array(string) * string

string

All the strings in the array are concatenated with the string on the right in between each string. Example: ({"foo,"bar})*"-" will return "foo-bar".

int / int

int

The right integer divided by the left integer rounded towards minus infinity.

float / int
int / float
float / float

float

The right value divided by the left value.

string / string

array(string)

In symmetry with the multiplication operator, the division operator can split a string into pieces. The right string will be split at every occurrence of the right string and an array containing the results will be returned. Example: "foo-bar"/"-" will return ({"foo","bar"})

int % int

int

The rest of a division. If a and b are integers, a%b is the same as a-(a/b)*b

float % float
int % float
float % int

float

The rest of a division. If a and b are floats, a%b is the same as a-floor(a/b)*b