For experimenting, you can put just about *everything* in an anonymous block.
eg Lets say you had to write a proc and a function (but dont have the privs). You could something like:
declare
my_local_variable int;
...
procedure my_proc is
begin
...
end;
function my_func return date is
begin
my_proc;
return my_calculated_date;
end;
procedure main(p_parameter varchar2) is
begin
...
end;
begin
...
...
main('Hello');
...
...
end;