Table of Contents

Basic expressions

Numbers and strings

All numbers are internally stored as 64-bit floats.

$ print 5, 5.5, -3.141592657
5 5.5 -3.14159

Hexadecimal numbers use the “0x” prefix.

$ print 0x100, 0X123
256 291

Underscores can be inserted in numbers at any points. This is only to improve readability for humans; the parser ignores them.

$ print 'Underscores for readability: %x' % 0x0012_3456
Underscores for readability: 0x123456

Text strings can use single, double, or triple quotes. Single and double are semantically equal. C-like escape sequences are supported, for example \n for a newline. Triple-quoted strings can contain newlines and quotes without having to escape them with a backslash.

$ print "Hello", 'World'
Hello World

$ print """I can "span"
newlines."""
I can "span"
newlines.

Arrays and dictionaries

Arrays are created using brackets around comma-separated elements.

$ print [1, 2, 3]
[ 1, 2, 3 ]

The elements of arrays can be of any type.

$ print [1, [2, 3], 4]
[ 1, [ 2, 3 ], 4 ]

Dictionaries contain key-value pairs. A dictionary is created with curly brackets.

$ print {'a': 10, 'b': 5}
{ a: 10, b: 5 }

Keys and values can be of any type.

$ print {'a': 'b', 1: ['b', {5:6, 6:7}], ['array', 'as', 'key']: 'oh my'}
{ 1: [ b, { 5: 6, 6: 7 } ], [ array, as, key ]: oh my, a: b }

Other value types

Time values store a specific point in time. The built-in function Time() returns the current local time.

$ print 'The time is now:', Time()
The time is now: 2019-11-19 21:33:16.501

Constants

There are reserved keywords for commonly used constants.

$ print True, False, None, Pi
True False (none) 3.14159

Built-in functions

The built-in len() function returns the size/length of its argument.

len("abcd") ⇒ 4
len([1, 2, 3, 4]) ⇒ 4
len({1:2, 3:5, 8:13}) ⇒ 3

There are functions for extracting all the keys or all the values of a dictionary into an array.

dictkeys({1:2, 3:5, 8:13}) ⇒ [ 1, 3, 8 ]
dictvalues({1:2, 3:5, 8:13}) ⇒ [ 2, 5, 13 ]

The functions Text() and Number() convert the argument to a text string or a number.

$ print Text(123), Number("123")
123 123

One can give a string argument to the Time() function to parse as a time and date.

$ print "Beginning of March 2011:", Time("2011-03-01")
Beginning of March 2011: 2011-03-01 00:00:00.000

$ print Time("2000-01-02 03:04:05.678")
2000-01-02 03:04:05.678

If the parsing fails, the resulting value represents an undefined point in time. A valid time evaluates to True and an undefined time evaluates to False when used as a boolean condition.

$ print 'Invalid time:', Time("123-123"), Time("")
Invalid time: (undefined Time) (undefined Time)

The timedelta() function calculates the difference between two points in time.

$ print 'Thousand seconds later:', timedelta(Time(), Time() + 1000)
Thousand seconds later: 1000

The serialize() and deserialize() functions convert their argument to/from a sequence of bytes. This is useful for instance when saving and reading values to/from a file. All values created in scripts can be serialized. The contents of a serialized block of memory cannot be modified via Doomsday Script.

$ a = [1, 'One', {1:'One'}]

$ print a
[ 1, One, { 1: One } ]

$ b = serialize(a)

$ print b
(Block of 46 bytes)

$ print deserialize(b)
[ 1, One, { 1: One } ]

The eval() function evaluates its argument as a script and returns the return value from it. The script gets runs in the same namespace where eval() was called.

$ a = eval(""" 'arg' + 'ument' """)

$ print a
argument

$ eval("""print "Printed from eval():", a""")
Printed from eval(): argument