In Perl ist das ganz einfach: Wenn Du _nicht_ dekodierst, hast Du Bytes. Wenn Du dekodierst, hast Du einen String.
nicht String, sondern das UTF8 Flag gesetzt.
Die mir bekannten, guten, Perl Unicode Tutorials legen allesamt Wert darauf, sich _nicht_ mit den Internas zu beschäftigen. Mit recht, wie ich finde!
Zur Erinnerung: Wir kommen vom Vergleich: "Warum Perl toller als PHP ist", hier im speziellen der Umgang mit utf8.
Sorry, irgendwo hapert's bei mir noch.
Unter der Voraussetzung, dass du unter _encode_ auch "<:utf8" verstehst, hast du insofern Recht, als für die Variable das UTF8 Flag gesetzt wird, welches das Verhalten von Funktionen und Operatoren steuert.
Selbstverständich, wobei ich bei Deinem Beispiel "<:utf8" nicht von Encode, sondern von Decode sprechen möchte. Ansonsten ist es genau das, was passiert.
Da hier der IO Layer arbeitet gibt es womöglich intern technische Unterschiede(siehe oben), logische sind mir keine bekannt.