TCL is a fun language and integrates well with most including perl and python. To be able to call a procedure based on a URL adds none of the frustration that MVC brings that I've found.
If your looking to pick up a new language to toy with; I would recommend TCL as an language to take a poke at. It does have an old unixy feel to it, but I've found it's mature and very solid. OO is also possible.
Nothing could be simpler when everything is a string, it leads you down a path of voodoo and creativity.
proc displayHackerNews {} {
set hn "Hacker News" ;#Set the variable (hn) with "Hacker News"
puts $hn ;#Prints the variable ($hn) to terminal
} ;#end procedure
displayHackerNews ;#execute the procedure
% Hacker News
If statements are easy set hn ""
if { $hn eq "Hacker News" } { puts $hn } else {
set hn "sad face"
puts $hn
} ;#end if
Loops are fun set hn "Hacker News" ;#Set a variable
while { $hn eq "Hacker News" } {
puts "$hn" ;# print "Hacker News" to terminal in an infinite loop
} ;#end loop
Multi-threading is a breeze. set MyThreadID [thread::create {
puts "Hello from my new thread"
thread::wait
} ;#end code-to-run
] ;#end thread
And finally, a if-switch-threaded-loop set hn "Hacker News"
if { $hn eq "Hacker News" } {set switch "hn" } else { set switch "" }
switch $switch {
hn {
set MyThreadID [thread::create {
proc displayHackerNews {} {set hn "Hacker News" ; puts $hn} ;#end procedure
#set aCounter to zero, if aCounter is < 7 execute displayHackerNews procedure
for {set aCounter 0} {$aCounter < 7} {incr aCounter} { displayHackerNews }
thread::wait
} ;#end threaded-code
] ;#end thread
} ;#end switch-case
default {puts "sad face"}
} ;#end switch
Not a spokesperson, I just like TCL.NaviServer: https://sourceforge.net/projects/naviserver/ | https://wiki.tcl-lang.org/page/NaviServer
TCL/Tk: http://tcl.tk/ | https://wiki.tcl-lang.org/page/Tcl+Tutorial+Lesson+0 | https://www.tutorialspoint.com/tcl-tk/index.htm