That would not be difficult to parse as long as you can be confident that the characters & and = will never appear in any of the values for these properties.
Assuming the custom startup module calls the actions with the raw hash string set as the variable url-hash:
<$list filter="[<url-hash>split[&]]" variable="pair">
<$let key={{{ [<pair>split[=]first[]] }}} value={{{ [<pair>split[=]last[]] }}}
<$action-setfield $tiddler=`$:/temp/moodle-data/$(key)$` text=<<value>> />
</$let>
</$list>
Which for subdomain.tiddlyhost.com/##moodleid=55555&univid=666666&firstname=StudentName would give you the tiddlers:
| title | text field |
|---|---|
| $:/temp/moodle-data/moodleid | 55555 |
| $:/temp/moodle-data/univid | 666666 |
| $:/temp/moodle-data/firstname | StudentName |