How does memory leaks and circular refs (weak refs) interact with Unicode and encodings?

Learn how memory leaks and circular references interact with Unicode and encodings in Perl. Explore examples of weak references and their impact on memory management.
Perl, memory leaks, circular references, weak references, Unicode, encodings

# Example overview of memory leaks and circular references in Perl
use strict;
use warnings;
use Scalar::Util qw(weaken);

my $obj1 = {};
my $obj2 = {};

# Create circular references
$obj1->{ref} = $obj2;
$obj2->{ref} = $obj1;

# Weakening reference to avoid circular reference leading to memory leak
weaken($obj2->{ref});

# Displaying the contents
print "obj1 reference: ", $obj1->{ref} ? 'Exists' : 'Does not exist', "\n";
print "obj2 reference: ", $obj2->{ref} ? 'Exists' : 'Does not exist', "\n";

# Unicode interaction example
my $unicode_str = "Hello, 世界"; # String containing Unicode characters
print "Unicode string: $unicode_str\n";

# Encode and decode example
use Encode qw(encode decode);
my $encoded_str = encode('UTF-8', $unicode_str);
my $decoded_str = decode('UTF-8', $encoded_str);
print "Encoded string: $encoded_str\n";
print "Decoded string: $decoded_str\n";
    

Perl memory leaks circular references weak references Unicode encodings