#!/usr/bin/perl use strict; use warnings; use FindBin qw( $Bin ); use File::Spec::Functions qw( catfile ); my $file = catfile( $Bin, 'bytes_pragma.data' ); my $string_1 = "\x{C9}"; # LATIN CAPITAL LETTER E WITH ACUTE; 2 bytes in UTF-8 my $string_2 = "\x{20AC}"; # EURO SIGN; 3 bytes in UTF-8 { my $string = $string_1; print '[1] is_utf8() returns: ' . ( utf8::is_utf8( $string ) ? 'true' : 'false' ) . "\n"; print '[1] length() returns: ' . length( $string ) . " (no bytes)\n"; print '[1] length() returns: ' . do { use bytes; length( $string ) } . " (use bytes)\n"; open FH, "> $file" or die; print FH $string; close FH; print '[1] actual size is: ' . ( -s $file ) . "\n"; } { my $string = $string_1; utf8::encode( $string ); print '[2] is_utf8() returns: ' . ( utf8::is_utf8( $string ) ? 'true' : 'false' ) . "\n"; print '[2] length() returns: ' . length( $string ) . " (no bytes)\n"; print '[2] length() returns: ' . do { use bytes; length( $string ) } . " (use bytes)\n"; open FH, "> $file" or die; print FH $string; close FH; print '[2] actual size is: ' . ( -s $file ) . "\n"; } { my $string = $string_2; print '[3] is_utf8() returns: ' . ( utf8::is_utf8( $string ) ? 'true' : 'false' ) . "\n"; print '[3] length() returns: ' . length( $string ) . " (no bytes)\n"; print '[3] length() returns: ' . do { use bytes; length( $string ) } . " (use bytes)\n"; open FH, "> $file" or die; print FH $string; close FH; print '[3] actual size is: ' . ( -s $file ) . "\n"; } { my $string = $string_2; utf8::encode( $string ); print '[4] is_utf8() returns: ' . ( utf8::is_utf8( $string ) ? 'true' : 'false' ) . "\n"; print '[4] length() returns: ' . length( $string ) . " (no bytes)\n"; print '[4] length() returns: ' . do { use bytes; length( $string ) } . " (use bytes)\n"; open FH, "> $file" or die; print FH $string; close FH; print '[4] actual size is: ' . ( -s $file ) . "\n"; } { my $string = $string_1; utf8::upgrade( $string ); print '[5] is_utf8() returns: ' . ( utf8::is_utf8( $string ) ? 'true' : 'false' ) . "\n"; print '[5] length() returns: ' . length( $string ) . " (no bytes)\n"; print '[5] length() returns: ' . do { use bytes; length( $string ) } . " (use bytes)\n"; open FH, "> $file" or die; print FH $string; close FH; print '[5] actual size is: ' . ( -s $file ) . "\n"; } # but ... { use bytes; my $string = $string_1; utf8::upgrade( $string ); print '[6] is_utf8() returns: ' . ( utf8::is_utf8( $string ) ? 'true' : 'false' ) . "\n"; print '[6] length() returns: ' . length( $string ) . " (use bytes)\n"; open FH, "> $file" or die; print FH $string; close FH; print '[6] actual size is: ' . ( -s $file ) . "\n"; }