Not a 20x example, but file handling is one that stems from the implementation of Python's garbage collection.
Python does not guarantee garbage collection at scope end. Thus you need code like this:
def controlled_execution(callback):
set things up
try:
do something
finally:
tear things down
Or alternatively, slightly obtuse incantations like this:
class controlled_execution:
def __enter__(self):
set things up
return thing
def __exit__(self, type, value, traceback):
tear things down
with controlled_execution() as thing:
some code
Perl makes this much easier by guaranteeing garbage collection of objects that have left scope, even if the scope is left via die() and caught with eval(). If an object leaves scope, its DESTROY method is called immediately, and after that the object is dismantled. Thus objects can carry their teardown around in their class definition (which can be easily modified by overriding or wrapping the method in a new class), and user's need to do nothing whatsoever to ensure the teardown being executed.
Thus, file opening and using code for example can look as simple as this and contain zero gotchas and no "you need to understand this to actually know what it does":
sub do_a_thing {
my $file = io->file(".bashrc");
print $file->slurp;
}