This is why I love reading good coding books: the colorful examples that trick you into understanding the material without thinking too hard about it. Check out this section from Modern Perl I just got to today:

Second, a method call always involves a dispatch strategy, where the object system selects the appropriate method. Given the simplicity of Cat, the dispatch strategy is obvious, but much of the power of OO comes from this idea. Inside a method, its first argument is the invocant. Idiomatic Perl 5 uses $self as its name. Suppose a Cat can meow():

package Cat
    sub meow
        my $self = shift;
        say 'Meow!';

Now all Cat instances can wake you up in the morning because they haven’t eaten yet:

my $fuzzy_alarm = Cat->new();
$fuzzy_alarm->meow() for 1 .. 3;

Cats are something I understand. Now if only I could so easily reprogram my own fuzzy alarm….