Can I suggest Perl?
You can use it with a pure fucntion-orientation just like a script, but it has an OO structure that you can use to learn what OO is all about. (It's looser than C++'s and Java's Object Orientation, frexample, but because you're can poke the internals and 'break' classic inheritences you can get to know what works and what doesn't, and learn some of the reasoning behind C++/Java's constraints... As long as you don't expect to have the same leeway if you move on, of coruse.)
It's also useful as a .cgi language (IMHO better than PHP, except that instead of the "HTML containing code that makes more HTML" idea, it's just "code that you make produce all the HTML").
The flexibility of data structure will mean that you're able to do anything you want[1] once you know how to use it, but you can work your way up to that level in stages, with that time, aptitude and curiosity.
Again, the disadvantage is that when transferring skills to something more tightly typed you're no longer free to store array references in any old static, etc... (See [2] for one where I did.) Though you do have the ability to define types that have variable record layouts, so it shouldn't stop you if you're determined enough to continue, and you're not too bothered about readability. (Noting that I stripped the examples of the comments and excess whitespace, so they're scarier looking than they are in my code.
[1]It can look scary, at first sight.
e.g. "CULL: while ($i < $#{$_[0]}) { if (Feature(${$_[0]}[$i],@{$_[3]})) {$i+=2; next CULL} splice @{$_[0]},$i,2;}", is a slightly obfuscated code from a recent project of mine meant to remove pairs of elements from an array where the first of each pair does not match a criteria.
"sub TakeJob { my $J = (sort {Weighting($b) <=> Weighting($a)} keys %JOBSET)[0]; if (int(@{$JOBSET{$J}})) { return ($J,shift @{$JOBSET{$J}}) } else { return () } }" is part of another conceptual project where I was implementing my own threading model, for 'LOLZ'.
"sub dos { unless (defined wantarray) { map { y/\//\\/ } @_; return } my @r; for my $i (@_) { my $j = $i; $j=~y/\//\\/; wantarray?push @r, $j:return $j } return @r }" is something I bashed up to handle flexible conversion of directory path styles (as unary operator or straight function, for both scalar or array variables).
Yes, I know that there are already modules that give those functionalities, but I like tinkering.
[/1]
[2] map { $_ = [split("/",$_)]; pop @$_; $_ = join("/",@$_) } @_;